2006年3月31日(金)

subversion リポジトリの統合

学生の頃からのコードがあちこちに散財して残っていて、たまに必要になるので1個所に集めておくことを画策。
問題は、残っているのが CVS だったり SVN のリポジトリのかたちだってこと。その時その時でリポジトリ作って管理していて、そういうリポジトリのバックアップばかりが残っていて、なにがなにやら。
しょうがないので全部展開して、どこになにが入っているのかを書き出してあれこれ考える。

とりあえず、一つのリポジトリに集めてくるコンポーネントを確定。元データは、 CVS, SVN 双方のそれぞれ複数のリポジトリ。
svn のリポジトリの引っ越しは、基本的に svnadmin で dump して load するだけ。リポジトリから一部のコンポーネントだけ抜くときは…、 dumpfilter を使うんだったかな?問題は、一つの svn リポジトリに複数の dump を load する方法。答えは、 --parent-dir を使う(参考:So-net blog:Miscellaneous:Subversionで複数のリポジトリをまとめる(..)。

一方 CVS から SVN へ、リポジトリの変換には cvs2svn を使う。これは、まっさらな svn リポジトリにしか書けない。で、どうするか。CVS リポジトリの段階で import する対象を集めたディレクトリを作っておく。 CVSROOT は別に持ってこなくても困らない。こいつを、 cvs2svn で svn の真っ新なリポジトリに移築。その後、 svn リポジトリに temproot を作っておいて dump/load 。 temproot 以下のディレクトリは svn コマンドで移動。これは working copy を checkout して作業する方がいい。リポジトリを直接いじろうとすると、 svn mv するたびに commit log を書かないといけなくなるから。

方針としては trunk, tags, branches があって、 trunk/{foo, bar} と並んでいたら、 tags/TAG1/foo とか tags/TAG2/bar とか並べてみた。

ちなみに、 cvs2svn の段階で、1ファイルだけ他のファイルで trunk についてる symbolic tag が branch の方についてるのがあって、 cvs2svn がコケていたので、もう面倒なので rcs ファイルを直接編集して回避。

[referer: [an error occurred while processing this directive]]

あわせて読みたい