svkの使い方まとめ
svkはsubversionを使うときに非常に便利で、必須のツールだ。
使い方を解説しているところはいくつかあるが、いまひとつsvkの動作についてピンとこなかった。svkの動作がわかるように、確認手順まで添えた使い方をまとめてみた。
準備
- リモートSubversionリポジトリ
- http://myserver.com/svn/myproj
- ミラー
- //mirror/myproj
- ローカルブランチ
- //myproj
- 作業コピー
- ~/myprok-work
リモートの内容をミラー
リモートの内容を、ローカルにミラーする。"//"で始まるパスは、svkのデポット(ローカルのリポジトリ)を表す。mirrorコマンドにより、リモートとローカルのリポジトリを対応付け、syncコマンドでファイルを同期する。
# 1. リモートのミラーを設定 $ svk mirror http://myserver.com/svn/myproj //mirror/myproj # 2. ミラー設定を確認 $ svk mirror --list Path Source ============================================================ //mirror/myproj http://myserver.com/svn/myproj # 3. リモートの内容をミラーに反映 $ svk sync //mirror/myproj
mirrorコマンドはミラーの設定を追加するだけで、リモートとの同期は行わない。
ローカルブランチを作成
//mirror/myprojは、http://myserver.com/svn/myprojのエイリアスのように振舞う。従って、//mirror/myprojを直接チェックアウトしてコミットすると、リモートに自動的に反映される。
ローカルで編集を行い、あとでまとめてリモートに反映するには、あらかじめローカルブランチ//myprojを作成しておく。ローカルブランチに対して編集を行った後、//mirror/myprojにマージすることにより、リモートに反映する。
# 1. ローカルブランチを作成 $ svk copy //mirror/myproj //myproj --message "<好きなコメント>" # 2. ローカルブランチを確認 $ svk info //myproj Depot Path: //myproj Revision: 27 Last Changed Rev.: 27 Copied From: /mirror/myproj, Rev. 26 Merged From: /mirror/myproj, Rev. 26
ローカルブランチから作業コピーをチェックアウト
$ # 1. チェックアウト $ svk checkout //myproj ~/myproj-work $ # 2. 作業コピーを確認 $ svk checkout --list Depot Path Path ======================================================================== //myproj /home/hoge/myproj-work
普段の作業
ローカルブランチへのコミット・更新
作業コピーでの編集をローカルブランチへコミットしたり、作業コピーを更新したりする作業は、svnコマンドと全く同じく行える。
$ svk commit $ svk update
ローカルブランチの内容をリモートに反映
ローカルブランチの内容は、pushコマンド一つでリモートにマージされる。
- ミラーへのマージ
- ミラーからリモートリポジトリへの同期
$ svk push
下記のコマンドで、pushされる経路を確認できる。
# 1. ローカルブランチの情報 $ svk info Checkout Path: /home/hoge/myproj Depot Path: //myproj Revision: 20 Last Changed Rev.: 20 Copied From: /mirror/myproj, Rev. 5 Merged From: /mirror/myproj, Rev. 19 2. ミラーの情報 $ svk info //mirror/myproj Depot Path: //mirror/myproj Revision: 28 Last Changed Rev.: 28 Mirrored From: http://myserver.com/svn/myproj, Rev. 11 Merged From: /myproj, Rev. 16
pushコマンドは、Copied FromとMirrored Fromの情報から、どこにマージすべきかを取得している。ちなみにこの情報は、~/.svk/configに格納されている。
- --verbatim
- このオプションにより、リモートsvnのコミットログに余計な文字列が入るのを抑止できる。
- --lump
- デフォルトではチェンジセットを一つずつリモートに反映するが、このオプションによりまとめて1チェンジセットとして反映できる。
リモートの変更を作業コピーに反映
pullコマンドにより、リモートで起こった変更を作業コピーまで一気に反映できる。
- リモートからミラーへの同期
- ミラーからローカルブランチへのマージ
- ローカルブランチによる作業コピーの更新
$ svk pull
その他の作業
作業コピーを削除する
作業コピーの情報は、.svk/configに記述されているため、svnのように単にディレクトリを消しても、作業コピーの情報が残ってしまう。作業コピーを消したときは、この情報も消す必要がある。
# 1. リストを表示 $ svk checkout --list Depot Path Path ======================================================================== //myproj /home/hoge/myproj-work # 2. 作業コピー情報を削除 $ svk checkout --detach /home/hoge/myproj-work