SVK

SVK とは?

リモートに存在するリポジトリをローカルに複製する事の出来るツールです。
Subversion、CVS等のリポジトリを扱えます。
リモートからリポジトリを複製し、メインとなるリモートのリポジトリと
ローカル側に複製したリポジトリとでやりとりを行う体系を、
分散リポジトリ方式と呼びます。
この方式は、MercurialGitなどでも使われています。
なお、SVKではローカルに複製したリポジトリの事を、depotと呼びます。

SVK の利点

リポジトリをローカルに持つことにより、

SVK の難点

SVK のインストール

環境変数にSVKROOTを設定しておくと、ユーザプロファイル配下に
 depotが作成されなくなるので事前に設定しておく。

  1. インストーラー をダウンロードし、インストールをする。
  2. 全ユーザーの環境に反映するか?(Change the environment for all users?)というダイアログに対して「はい」を選びます。
  3. SVKで使用するリポジトリ(depot)の作成
    svk depotmap --init 
    を実行します。
    • Repository %SVKROOT%/local does not exist, create? (y/n)というメッセージが表示されるのでyを入力します。
    • このコマンドは実行しなくても、次の手順で行うsvk mirror時にdepotが存在しない場合
      自動で呼び出されるので、省略しても構いません。
    • 正常に終了すれば、%SVKROOT% 配下にdepotが作成されます。

  4. 作成したdepotにミラーオプションを付ける。
    svk mirror http://servername/svn/(ProjectName) //mirror/(ProjectName)

  5. depotへのミラーを実行する。
    svk sync //mirror/(ProjectName)
    • 全履歴を取得しますが、場合によって悪影響を及ぼすので、最新の履歴で良い場合は、--skipto HEAD オプションを追加すると良い。
  6. ミラー化したdepotのブランチを作成する。
    svk cp //mirror/(ProjectName) //local/(ProjectName) --message "<何かメッセージ>" -p
    • -pを付け忘れるとエラーになる(と思う)ので注意
    • 運用方法によっては、//(ProjectName)/local のようにする場合もあります。

SVK の運用方法とコマンドの使い方

  1. //mirror/(ProjectName) を最新の状態にする
    svk sync //mirror/(ProjectName)
  2. 最新にした //mirror/(ProjectName)//local/(ProjectName)反映(マージ)させる
    svk pull //local/(ProjectName) 
    • マージが行われるのでコンフリクトする場合もあります。
  3. depotの //local/ProjectName) からソースをチェックアウトする
    例:file://%SVKROOT%/local/(ProjectName)/trunk
  4. ソースの修正が終わったら、コミットを行って下さい。コミットの仕方は普段通りですので説明しません。
  5. //local/(ProjectName) にコミットされた内容を ミラーする元となったリポジトリへpushします。
    svk push --verbatim //local/(ProjectName)
    ※push の引数について
    --verbatim
     svnのコミットログにSVKが自動で出力するログメッセージを付け加えない。
     svkを利用していない人にとって、svkのログは不要です。このオプションは必ず付ける位でいいでしょう。
    --lump
     デフォルトではチェンジセットを一つずつリモートに反映するが、このオプションによりまとめて1チェンジセットとして反映できる。
     depotへコミットを10回行っていても、svk→svnへのコミットを1度で済ませる。
     好みにもよりますが、ログメッセージが複数回分、ひとまとめにされるのでその点は気を付ける事。
  6. pushして反映されるのはリポジトリに対してなので、続けて利用される場合は、
    svk sync //mirror/(ProjectName)
    svk pull //local/(ProjectName) 
    として、depotを最新にするようにした方が良いでしょう。


参考リンク