開店休業中

Mac/開発環境/svk

最終更新:

okumura

- view
メンバー限定 登録/ログイン

svkはDeveloper Toolsに含まれています。
なので、LeopardのインストールDVDからデベロッパーツールをインストールすれば、svkも使用可能になります。

バージョンは2.0.1、/usr/lib以下のsvnがらみのライブラリを使っているので、svnを入れる際にlib配下はそっとしておいた方が良いかもしれません。

ざっくり言うとcvsでいうベンダーブランチを使った追っかけと同じような事を自動でやってくれるツール、と思っておけばだいたい間違いなさそうです。

ベンダーブランチを切って、編集用ブランチを切って、とすればマージはコマンド1発で確実にやってくれる、という感じです。

だいたいの使い方としては、

  • ローカルにリポジトリのミラーと作業ブランチを用意する
  • ミラーはネットワークにつながってる間は常に本リポジトリと同期させる
  • 作業はこまめに作業ブランチにコミットし
  • 一通りまとまったら作業リポジトリにためていた変更を一気にミラーと本リポジトリに反映 と言った感じになります。

まずは準備

まず、

svk depotmap --init

として、環境を作成する必要があります。
このコマンドを実行すると、$SVKROOTに設定ファイルやらリポジトリやらが作成されます。
$SVKROOTが未設定の場合は~/.svkが使用されます。

で、このリポジトリの事をdepotと言うみたいなんですが、こいつはデフォルトでは//…でアクセスするルートのdepotが$SVKROOT/localに置かれるだけで好きなdepotを好きな場所に置く事が出来ます。たとえば、

svk depotmap myProject /Volumes/svkroot/myProject

の様に指定すると/myProject/でアクセスできるdepotを作成する事が出来ます。

depotのリストは、

svk depotmap -l

で確認できます。svkの管理下から外す時は、たとえば先ほどのmyProjectを外す場合は

svk depotmap -d myProject

とすればsvkとは関係のないただのsvnリポジトリになります。

mirrorの作成

depotが出来たら、ローカルにミラーを作成します。
例えば先ほどのmyProjectの下のmirror/以下に「http://myProject.com/svn/product」をミラーリングしたい場合は、

svk mirror /myProject/mirror/product http://myProject.com/svn/product

の様にします。

このミラー、svkを使って操作する限りは常に本リポジトリと同期してくれるようなのですが、svnを使って操作するといとも簡単に整合が取れなくなるので注意が必要です。

まぁ、手でマージして合わせれば良いだけなのですが…大変でした。

で、この状態ではまだミラーリングの設定が出来ただけで実際にリポジトリの内容が取り込まれてはいません。
取り込むためには、

svk sync /myProject/mirror/product

のようにsyncコマンドにmirrorで作成したミラーのパスを渡してやります。

また、

svk sync --all

とすれば、複数ミラーが存在してもまとめて全てを取り込む事が出来ます。

作業用ブランチの作成

で、常に同期されるのも困りますしsvnから使いたいので、別にブランチというかコピーを作ってそっちを触ります。これは

svk copy /myProject/mirror/product /myproject/product

の様にcopyコマンドを使ってsvnでブランチを切るのと同じように切るだけです。

一度作った作業用ブランチに最新のミラーを反映させるためには

svk pull /myproject/product

の様にpullコマンドを使用します。

作業の反映

作業用ブランチを指定してpushコマンドを実行すれば一気にミラー、本体へと反映してくれるのですが、そのままだとsvkの書き足すヘッダが付いてしまいます。これを抑制するために、

svk push ---verbatim /myproject/product

と「--verbatim」オプションを使用した方がいい感じです。