cvsでバージョン管理されてるものを手元のsvnリポジトリで追っかけしたいときのメモ。
sf.jpがsvnに対応してくれて、tracも使えて、ついでにtracのwiki記法とかプラグインがpukiwikiみたいになってくれれば何の問題もないんだけどねー。
必要なもの
でびあんだとsubversion-toolsにsvn_load_dirsというのが入ってます。これがcvsの変更をうまいことsvnリポジトリに反映させてくれます。これで検索すればいろんなところに説明が書いてあるかんじ。
感覚
CVSのworking copyをrepos/vendor/currentに入れておいて、cvs upして差分が出たらそれをcurrentに自動でsvn mergeしてくれます。-tオプションをつければ一緒にtagも作ってくれます。cvsとsvnの大きな違いである、ファイルやディレクトリの追加・削除は、どうするのか聞いてくれるらしい。まだ試してないです。
mergeは自分でやります。これもやってくれたらいいのにな。
準備
- cvsのworking copyを用意
% mkdir -p /path/to/example.cvs; cd example.cvs % cvs -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/example .
% svnadmin create example.svn % svn mkdir file:///path/to/example.svn/{vendor,vendor/current}
- cvsのworking copyをimport
% svn import /path/to/example.cvs file:///path/to/example.svn/vendor/current
- trunkにブランチする
% svn copy file:///path/to/example.svn/vendor/current file:///path/to/example.svn/trunk
-
- ちなみに先にtrunk作っちゃうとtrunk/currentってなっちゃうので注意。
- とりあえずtagうっておこう
% svn copy file:///path/to/example.svn/vendor/current file:///path/to/example.svn/vendor/`date +%Y%m%d`
これで準備は終わり。
コミットメールきたよ
本家のアップデートが出たぞ! さあmergeだ!
あらかじめ svn co file://path/to/example.svn/trunk /path/to/work してあるとします。
- まずはcvs up
% cd /path/to/example.cvs; cvs up -Pd
- svn_load_dirsの出番
% svn_load_dirs -t `date +%Y%m%d` file:///path/to/example.svn/vendor current example.cvs
- 手元のworking copyにmerge
% cd /path/to/work % svn merge file:///path/to/example.svn/vendor/前回の日付 file:///path/to/example.svn/vendor/今日の日付 .
-
- コンフリクトとかを確認してコミットだ!