svkの使い方まとめ

svksubversionを使うときに非常に便利で、必須のツールだ。
使い方を解説しているところはいくつかあるが、いまひとつ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