SVKとTortoriseSVN

ローカルのリポジトリにしかアクセスしないのであればあまり関係ないかもしれませんが、ネットワーク上のリポジトリにアクセスする必要がある場合には svn をそのまま使うよりも svk を使った方が便利。Win32 版のバイナリも配布されています。

svk はローカルにリポジトリのミラーを作ってくれるので、ネットワークに繋げない間も commit や diff 等の操作を行うことができます。で、ネットワークに繋がったときにミラー元のリポジトリへ反映、なんてことができます。なのでノートで作業しているときには非常にありがたい。例えば

$svk cp http://hoge.com/svn/foo/bar/trunk

とかやると、ローカル(デフォルトでは //mirror/bar-trunk)にミラーを作成し、ローカル作業用にブランチ(デフォルトでは //bar-trunk)を切ってくれます。そのあとで

$svk co //bar-trunk bar

とかやってローカルブランチからチェックアウトし、作業します。あとは svn 同様、svk diff とか svk commit などのコマンドを使って作業していきます。

ミラー元の変更内容をローカルに反映させるには、Workingcopy ディレクトリ内で

$svk pull

とします。複数人数で開発しているときに trunk を追いかけながら修正作業を行うときには定期的に実行する必要があるでしょう。また、ローカルでコミットした内容をミラー元に反映するときには、

$svk push

としますが、デフォルトではログメッセージに次のような感じのヘッダが送られてしまいます。

r22@hostname: username | 2005-09-09 15:50:09 +0900

これを送らないようにするには、「–verbatim」オプションを付ければ大丈夫です。

さらに、ローカルへの複数コミットをまとめて一つのコミットとしてミラー元に反映したい場合には、「–lump」または「-l」オプションを付ければできます。

こまめにコミットしておいて、ミラー元のリポジトリをあまり汚したくないといった場合には便利でしょう。

気になったのは svn や TortoriseSVN との併用ですが、もちろん別個に使う場合にはまったく問題ありません。が、svk と絡めて利用するには若干注意する必要があります。

例えば svk でチェックアウトしたディレクトリは、svk の管理下にあります。したがって、そこで svn commit とかやっても当然コミットできません。もちろん TortoiseSVN を利用しても同じです。

なので、僕は次のように使ってみています。

Subversion リポジトリのルートは、svk で管理される DB ディレクトリ(デフォルトでは 「C:Documents and Settings\username\.svk」)の下の「local」というディレクトリになっています。

「svk cp」コマンドでミラー&ブランチした後、「file:///」でそこに作成されたブランチ(//mirror/ではない方)を指定して、svk を使わずに svn もしくは TortoiseSVN を使ってチェックアウトします。

例えば

$svn co file:///C:/Documents and Settings/username/.svk/local/bar-trunk

といった感じ。で、commit などのリポジトリへの操作は svn もしくは TortoiseSVN で行います。

そして push や pull を行う場合には、

$svk [push|pull] //bar-trunk

って感じで。今のところ、これで特に問題は起きてません。


【URL】

Similar Posts: