SVK †
SVK とは? †
リモートに存在するリポジトリをローカルに複製する事の出来るツールです。
Subversion、CVS等のリポジトリを扱えます。
リモートからリポジトリを複製し、メインとなるリモートのリポジトリと
ローカル側に複製したリポジトリとでやりとりを行う体系を、
分散リポジトリ方式と呼びます。
この方式は、MercurialやGitなどでも使われています。
なお、SVKではローカルに複製したリポジトリの事を、depotと呼びます。
SVK の利点 †
リポジトリをローカルに持つことにより、
- リモート側に影響を与えないため、こまめにコミットする事が出来る
- 自分の好きなようにリポジトリを操作出来るため、branchを気軽に作成できる
- オフラインの環境でもコミット、更新、ログの参照が行える
- TortoiseSVNのVer1.5以降はログをローカルにキャッシュするようになったため、ログの参照は可能となった
- ただし、事前に全てキャッシュする必要がある
- 参照元がローカルに存在しているため、ログの参照や差分の確認等が高速になる
- Subversionのリポジトリをバックアップする目的にも使用出来ます
- リモートとの差分を同期するので、フルバックアップする事に比べると負荷がかかりません
SVK の難点 †
- Subversionの扱いに慣れていない人には、少し敷居が高いです
- SVKは本家の情報をミラー化したり、本家の修正内容をdepotに反映させたり、コミットした内容などを本家(オリジナル)に対して反映させたりするのにSVKコマンドで操作を行うため、どうしても敷居が高くなります。
- SVKで作られたリポジトリに対して、チェックアウト、コミットなどを行う際にTortoiseSVNを使う事は可能です。
SVK のインストール †
※ 環境変数にSVKROOTを設定しておくと、ユーザプロファイル配下に
depotが作成されなくなるので事前に設定しておく。
- インストーラー をダウンロードし、インストールをする。
- 全ユーザーの環境に反映するか?(Change the environment for all users?)というダイアログに対して「はい」を選びます。
- SVKで使用するリポジトリ(depot)の作成
svk depotmap --init
を実行します。
- Repository %SVKROOT%/local does not exist, create? (y/n)というメッセージが表示されるのでyを入力します。
- このコマンドは実行しなくても、次の手順で行うsvk mirror時にdepotが存在しない場合
自動で呼び出されるので、省略しても構いません。
- 正常に終了すれば、%SVKROOT% 配下にdepotが作成されます。
- 作成したdepotにミラーオプションを付ける。
svk mirror http://servername/svn/(ProjectName) //mirror/(ProjectName)
- depotへのミラーを実行する。
svk sync //mirror/(ProjectName)
- 全履歴を取得しますが、場合によって悪影響を及ぼすので、最新の履歴で良い場合は、--skipto HEAD オプションを追加すると良い。
- ミラー化したdepotのブランチを作成する。
svk cp //mirror/(ProjectName) //local/(ProjectName) --message "<何かメッセージ>" -p
- -pを付け忘れるとエラーになる(と思う)ので注意
- 運用方法によっては、//(ProjectName)/local のようにする場合もあります。
SVK の運用方法とコマンドの使い方 †
- //mirror/(ProjectName) を最新の状態にする
svk sync //mirror/(ProjectName)
- 最新にした //mirror/(ProjectName) を //local/(ProjectName) へ反映(マージ)させる
svk pull //local/(ProjectName)
- マージが行われるのでコンフリクトする場合もあります。
- depotの //local/ProjectName) からソースをチェックアウトする
例:file://%SVKROOT%/local/(ProjectName)/trunk
- ソースの修正が終わったら、コミットを行って下さい。コミットの仕方は普段通りですので説明しません。
- //local/(ProjectName) にコミットされた内容を ミラーする元となったリポジトリへpushします。
svk push --verbatim //local/(ProjectName)
※push の引数について
--verbatim
svnのコミットログにSVKが自動で出力するログメッセージを付け加えない。
svkを利用していない人にとって、svkのログは不要です。このオプションは必ず付ける位でいいでしょう。
--lump
デフォルトではチェンジセットを一つずつリモートに反映するが、このオプションによりまとめて1チェンジセットとして反映できる。
depotへコミットを10回行っていても、svk→svnへのコミットを1度で済ませる。
好みにもよりますが、ログメッセージが複数回分、ひとまとめにされるのでその点は気を付ける事。
- pushして反映されるのはリポジトリに対してなので、続けて利用される場合は、
svk sync //mirror/(ProjectName)
svk pull //local/(ProjectName)
として、depotを最新にするようにした方が良いでしょう。
参考リンク †