svk

svnの分散レポジトリシステム、らしい。subversionと互換性を保ちながら作業できるのがどうやらウリみたい。

参考: http://mono.kmc.gr.jp/~yhara/w/?SvkTutorial

使ってみた

@etch。とりあえずそのものずばり、svkというパッケージがあるのでいれる

% sudo apt-get install svk
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
以下の特別パッケージがインストールされます:
  libalgorithm-annotate-perl libalgorithm-diff-perl libclass-accessor-perl
  libclass-autouse-perl libclone-perl libcompress-zlib-perl
  libdata-hierarchy-perl libextutils-autoinstall-perl libfile-chdir-perl
  libfile-type-perl libfreezethaw-perl libio-digest-perl libio-string-perl
  liblocale-maketext-lexicon-perl liblocale-maketext-simple-perl
  libperlio-eol-perl libperlio-via-dynamic-perl libperlio-via-symlink-perl
  libpod-escapes-perl libpod-simple-perl libregexp-shellish-perl
  libsvn-mirror-perl libsvn-perl libsvn-simple-perl libtext-diff-perl
  libtimedate-perl liburi-perl libyaml-perl

このように結構依存関係が多く、またperlである。

svk {mirror,sync}

% svk mirror //mirror/test http://svn.catatsumuri.org/test
Repository $HOME/.svk/local does not exist, create? (y/n)y
Committed revision 1.

こんな感じでやるらしい(実際には$HOMEはホームディレクトリに展開される)。

//mirror/test

というのはどこに存在するかというと、$HOME/.svkの中に仮想レポジトリみたいなものが作成されるみたい。

でもって

% svk sync //mirror/test                 
Syncing http://svn.catatsumuri.org/test
Retrieving log information from 1 to 1
Committed revision 2 from revision 1.

これで実際の内容を同期させる。特定のリビジョンから始める事もできるっぽい。

結局$HOME/.svk以下が全てで、この下のlocalという所に新たにsvnのdatabaseが出来ているのがわかる

これはsvn lsと同様にsvk lsとしても中身が見えるようだ

% svk ls //mirror/test    
trunk/

svk copy

svk的にはミラーを取ってきたら、さらにそれをコピーして使う、らしい(調べてないのでチュートリの受け売り)。なので一度こんな感じでコピる

% svk copy //mirror/test //test
Waiting for editor...
Committed revision 3.

コメントを求められるので適当に書いた。いろいろつついてみる

% svk ls //test  
trunk/

% svk log //test                            
--------------------------------------------
r3:  $USER | 2008-11-10 15:38:42 +0900

copied
--------------------------------------------

という感じのようで。

checkout

先程作成したバーチャルレポジトリみたいなのがsvkコマンドで取ってこれる。ただこれ、svnと互換性があるのでsvnでcheckoutする方法もありみたい?だけどもうまくいかないし、なんか気持ちわるいのでsvk coとかしてみた

% svk co //mirror/test
Syncing //mirror/test(/mirror/test) in /data/www/tmp/test-svk/test to 3.
A   test/trunk

ほんと、なんも入ってないです。trunkだけ。

.svnとかが無いのがポイントなのかもしれない

% find test 
test
test/trunk

作業する(ミス版)

とりあえず何か足してみます。

% cd test/trunk 
% echo mogemoge > test.txt
% svk st     
?   test.txt
% svk add test.txt
A   test.txt
% svk ci test.txt -m initial                                  
Commit into mirrored path: merging back directly.
Merging back to mirror source http://svn.catatsumuri.org/test.
Merge back committed as revision 2.
Syncing http://svn.catatsumuri.org/test
Retrieving log information from 2 to 2
Committed revision 4 from revision 2.

おおっと、syncされちゃいました。そういうもんらしいです。なぜかというとmirror/testをcoしてしまったのが敗因でcopyしないといけないというのはそういう理由らしいです。

% cd ../../ 
% ls 
test
% rm -rf test 
% svk co //test
% find test  
test
test/trunk

ミラーの方にコミットしてしまったのでいろいろと厄介な事がおきてますね。test.txtとかが消滅しちゃってます。こういう場合は一度ミラーを最新にしないといけないみたい。

% svk pull //test                                           
Auto-merging (2, 6) /mirror/test to /test (base /mirror/test
A   trunk/test.txt
New merge ticket: 9e6fbef5-a21f-4037-9e12-be31364ac53a:/:4
Committed revision 7.

確かにtest.txtがaddされたっぽいですね。お手元もupdateしてみます

% svk up test                                         
Syncing //test(/test) in ...
A   test/trunk/test.txt

作業する(修正版)

やはりsvkコマンドを使います。

% cd test/trunk 
% echo mogemoge > test2.txt
% svk st      
?   test2.txt
% svk add test2.txt 
A   test2.txt
% svk ci -m added    
Committed revision 8.

こんな感じで取得元に反映されてないのがポイント。反映させるにはsvk push

% svk push //test 

さて、svkじゃなくてsvnでやってる側をちょっと覗いてみましょ。

r5 | user | 2008-11-10 16:03:20 +0900 (月, 10 11月 2008) | 3 lines

 r8@host:  localuser | 2008-11-10 16:00:31 +0900
 added

ちょいログうざいですね。少し改善してみます。

% echo mogemoge >> test2.txt
% svk ci -m modified   
Committed revision 10.
% svk push --verbatim //test

verbatimがポイントみたい。これで普通っぽいログになりました。svkを使ってると明示する意外の用法があるのかどうかは不明

r6 | user | 2008-11-10 16:06:10 +0900 (月, 10 11月 2008) | 2 lines

modified

がしがし作業する

たとえばこんな感じで2つリビジョンをsvk側で上げたとします

% echo mogemoge >> test2.txt
% svk ci -m modified1  
Committed revision 12.
% echo mogemoge >> test2.txt 
% svk ci -m modified2  
Committed revision 13.

これをpushします

% svk push --verbatim //test 

するとsvn側のログは2つになります。

------------------------------------------------------------------------
r8 | user | 2008-11-10 16:09:44 +0900 (月, 10 11月 2008) | 2 lines

modified2

------------------------------------------------------------------------
r7 | user | 2008-11-10 16:09:43 +0900 (月, 10 11月 2008) | 2 lines

modified1

そでなくて一括でやる場合。

% echo mogemoge >> test2.txt
% svk ci -m modified3
Committed revision 16.
% echo mogemoge >> test2.txt
% svk ci -m modified4
Committed revision 17.

これを先刻みたいなやり方でやるとリビジョンが2つ上がってしまうわけですが、smergeというのを使うとリビジョンを1つにまとめて送信するらしい

% svk smerge //test //mirror/test 
r9 | user | 2008-11-10 16:15:19 +0900 (月, 10 11月 2008) | 1 line merged ------------------------------------------------------------------------ r8 | user | 2008-11-10 16:09:44 +0900 (月, 10 11月 2008) | 2 lines modified2 ------------------------------------------------------------------------ r7 | user | 2008-11-10 16:09:43 +0900 (月, 10 11月 2008) | 2 lines modified1
 

た、だ、し、svk:mergeという属性がつきます。これはsvk側の管理用らしいです。diffをみてみるといいかもしれない。まぁそういうもんだという事でこれがアレならgit-svnを使うしかないかも。普通にpushしてもやっぱり付きます

svk.txt · 最終更新: 2012/04/07 10:32 (外部編集)
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0