svkを使ってみた
なにやらsvkというものが流行ってるようなので使ってみた。
svkはSubversionのラッパーのような感じでリポジトリの分散管理が行えるシステム。
ローカル環境にリポジトリのミラーを作成して、元のリポジトリと同期を取ることができる。
具体的にはノートPCなんかでローカルにミラーを作成しておくと、ネットワークに繋がっていなくても開発が行えて、ネットワークに繋がったときに溜まっていたコミットをまとめて反映、というようなことができる。
また、個人的な作業ブランチの代わりに使うといったこともできる。
全体の流れ
- ミラーの作成
- 作業用ブランチの作成
- チェックアウトしていつものように作業
- 本家と同期
インストール
Version Control with SVKからダウンロードしてきてインストール。
Windowsの場合はSVKWin32というのがあるのでこちらをインストール。
インストーラに従って適当に進めていけば、コマンドプロンプトでsvkコマンドが実行できるようにしてくれる。
svkの初期化
svk depotmap --init
Windowsの場合は\Documents and Settings\{ユーザ名}の下に出来るので少し気持ち悪い。
気になる人はsvk.batあたりで環境変数HOMEに適当なパスを設定してあげるといいかも。
そのせいでおかしくなっても知らないけど(ぉ
ミラーの作成
svk mirror http://example.com/svn/example //mirror/example
trunkだけとかブランチだけでもよい。
svk mirror http://example.com/svn/example/trunk //mirror/example/trunk
同期の開始
ミラーを作成しただけでは実体が取得されていないので、なにはともあれ同期を行う。
svk sync //mirror/example
リポジトリがでかい場合は時間がかかる。
skiptoオプションを利用すると特定のリビジョン以降を対象に同期が行える。
svk sync --skipto HEAD //mirror/example
作業用ブランチの作成
なんでか知らないけどミラーリポジトリには直接コミットしてはいけないらしい。
ローカルでさらにブランチを作成して、そこにコミットしていくらしい。
svk copy -p //mirror/example //local/example
pオプションは親ディレクトリであるlocalも作ってもらうため。既に存在するなら不要。
開発作業(svkを使う場合)
開発作業(svnを使う場合)
svnコマンドやTortoiseSVN、Subclipseなどを使いたい場合はちょっとコツがいる。
svnやTortoiseSVNでチェックアウト
作業用ブランチからのチェックアウトは次のようにsvkの管理リポジトリ(?)を直接指定する形になる。
svn co "file:///C:/Documents and Settings/ユーザ名/.svk/local/local/example/trunk" example
実態として.svk/localの下が存在しないが気にせずに実行すべし(.svk/localがデータベースで、その中の/local/example/trunkになる)。
local/がかぶってるのは、先ほど作成した作業用ブランチのlocalの分。
もちろんtrunkだけじゃなくて全体だったりブランチなりでもよい。
あとは普通にsvnなりTortoiseSVNなりで作業が行える。
同期
オリジナルリポジトリからミラーへ。
svk sync //mirror/example
オリジナルリポジトリからミラー&作業用ブランチへ。
svk pull //local/example
作業用ブランチからミラー&オリジナルリポジトリへ。
svk push --verbatim //local/example
lumpオプションをつけると、ローカルでのコミットを1つにまとめて反映してくれる。
svk push --verbatim --lump //local/example
コメントも結合してくれる。
まとめ
svkをはじめて使う時はまず初期化。
svk depotmap --init
ミラーと作業用ブランチの作成。
svk mirror http://example.com/svn/example //mirror/example svk sync //mirror/example svk copy -p //mirror/example //local/example
チェックアウト(svnでの作業を選択してみる)。
svn co "file:///C:/Documents and Settings/ユーザ名/.svk/local/local/example/trunk" example
開発作業しまくり(ここはsvnコマンド)。
svn update svn ci ...
本家の更新も取り入れたいので同期も実行。
svk pull //local/example svn update
そろそろ本家に反映しておくか。
svk push --verbatim //local/example
とまあこんな感じになる。
pullとpush(あるいはsmerge)以外はsvnでの作業が行える。