分散バージョン管理システム svk
git,Monotoneだとかの分散バージョン管理システムというものがよくわからないのでスルーしていたsvkですが、僕みたいにどこぞのオープンソースプロジェクトのfork版を作っている人間には便利そうであることがこのへんから伝わってきたので、使ってみることにしました。
svnに無いsvkの特徴で自分が気になったものはこんなところですかね。
- コミット権限の無いリポジトリをローカルにミラーして好きにいじりまわせる*1
- .svnディレクトリが必要無いのでワーキングコピーがすっきり
- リポジトリパスの指定が楽になる
- CVSリポジトリもミラー元として扱える?
とりあえず実際に動かしてみることにしました。
$ svk mirror svn://svn.mplayerhq.hu/mplayer/trunk //mirror/mplayer $ svk mirror svn://svn.mplayerhq.hu/ffmpeg/trunk //mirror/ffmpeg $ svk sync --skipto HEAD //mirror/mplayer $ svk sync --skipto HEAD //mirror/ffmpeg
まずはmplayerとffmpegのリポジトリをローカルにミラーする設定を行ない、実際に同期を取ります。mplayer/tagsとかmplayer/branchsは必要無いのでtrunkだけミラーしています。mplayerのほうはr16000近くまでいっていて全部ミラーすると大変なことになりそうなので、とりあえず現時点でのHEADから履歴を開始するようにします。
$ svk cp -p -m '' //mirror/mplayer //mplayer $ svk cp -p -m '' //mirror/ffmpeg/libavcodec //mplayer/libavcodec $ svk cp -p -m '' //mirror/ffmpeg/libavformat //mplayer/libavformat $ svk cp -p -m '' //mirror/ffmpeg/libavutil //mplayer/libavutil
//mirror/hogehogeは大元のリポジトリそのもののミラーなのでいじってはいけません。svnでやるように適当なパスにコピーしてブランチを作成します。
$ svk co //mplayer mplayer-bvdd
svnと同じくワーキングコピーをチェックアウトしてセットアップは終了です。簡単ですね。あとは自分のブランチに対して変更を加えていきつつ、svk pullコマンドで上流の変更をマージしていけばいいようです。
$ svk pull ~/zaurus/mplayer-bvdd/ Syncing svn://svn.mplayerhq.hu/mplayer/trunk Retrieving log information from 19136 to 19136 Committed revision 207 from revision 19136. Auto-merging (200, 207) /mirror/mplayer to /mplayer (base /mirror/mplayer:200). U mp3lib/Makefile New merge ticket: b3059339-0415-0410-9bf9-f77b7e298cf2:/trunk:19136 Committed revision 208. Syncing //mplayer(/mplayer) in /home/atty/zaurus/mplayer-bvdd to 208. U mp3lib/Makefile
試しにpullしてみたら勝手にマージしてくれました。svnのみでVendor Branchやsvn_load_dirs.plを使って作業するより格段に楽です。
*1:これが分散バージョン管理システムの特徴なのかな?
レスレス
http://d.hatena.ne.jp/shinichiro_h/20060717#1153094672
いやぁ、夕方にはもうヘロヘロになっていると今までの経験から予測されるので、今回はパスしておきます〜。次次回は秋、でしょうか? それまでには何か用意したいなぁ。ノートマシンも(MacBookが欲しい今日この頃)。