CVSからSubversionへの移行(番外)

一気に移行できればよかったのだが、Subversionへの移行中もCVSで作業していて、その後環境が整ったので、移行中にCVSに起きた変更をSubversionリポジトリにもコミットする。その際、CVSでタグをちゃんと付けていなかったので、差分を作るためにcvs2svnを使う。

% cvs2svn -s /var/tmp/svntmp /path/to/cvsroot/some/dir
  • 2.変更を含むリビジョンを確認する。
% svn log file:///var/tmp/svntmp
  • 3.リビジョンnからリビジョンm(=n+1)までの差分を作り、作業コピーに適用する。
% cd ~/work/svn/some/dir
% svn diff file:///var/tmp/svntmp -r n:m | patch -p1

patchの引数-p1はtrunkの分の階層を無視するため。また、ここではブランチを使っていないと仮定。

  • 4.コミットする。
% svn ci -m "merged from cvs repository"

変更が複数回ある場合は3-4を繰り返す。特にこだわらなければm=最新リビジョンとして、一度にパッチを当ててしまってもいい。

補足

差分を作るまでの手順は、CVSでコミット毎にタグが付いていれば普通にcvs diffすればいい。また、仮にそうでなくても日付指定でcvs diffすることも可能だが、面倒だったのでcvs2svnを使った。