浦安市在住+デジカメ
浦安市在住のプログラマーが、デジカメを片手に日々を語ったり語らなかったり愚痴ったり・・・
-
[メモ] subversion(svn)のリポジトリ統合
Posted on 12月 14th, 2010 はおりん No comments以下のような2つのリポジトリがあったとする
/ |- project1/ | |- program1/ | | |- file11.txt | | |- file12.txt | | | |- program2/ | |- file21.txt | |- file22.txt | |- project2/ |- program3/ |- file31.txt
/ |- sources/ | |- branches/ | |- tags/ | |- trunk/ | |- file41.txt | |- file42.txt | |- documents/ |- file43.txt
片方はちゃんとbranchesまで切ってあるが、単体のプロジェクト専用になっている。
もう片方はベタでソースコードが入っているが、複数のプロジェクトが同居している。
これを、以下のような形に統合したい。かつ、program2は必要無い。
(1つのチームが担当しているプロジェクトを、1本のリポジトリにまとめたい。)/ |- project1/ | |- sources/ | |- program1/ | |- trunk/ | |- file11.txt | |- file12.txt | |- project2/ | |- sources/ | |- program3/ | |- trunk/ | |- file31.txt | |- project3/ |- sources/ | |- branches/ | |- tags/ | |- trunk/ | |- file41.txt | |- file42.txt | |- documents/ |- file43.txt
$ svnadmin create newrepo $ svnadmin dump oldrepo1 | \ svndumpfilter include /project1/program1 /project2/program3 | \ perl -pe 's{^Node-path: project1/program1/}{Node-path: project1/sources/program1/trunk/}' | \ perl -pe 's{^Node-path: project2/program3/}{Node-path: project2/sources/program3/trunk/}' | \ svnadmin load newrepo $ svnadmin dump oldrepo2 | \ svnadmin load newrepo --parent-dir /project3
解説
- svnadmin dump oldrepo1
古いリポジトリから、データをダンプする。リビジョンログも取り出してくれる。 - svndumpfilter include
リポジトリ内の、指定したパス以下の内容だけが含まれるようにフィルタリングしてくれる。 - perl -pe ‘s{^Node-path: project1/program1/}{Node-path: project1/sources/program1/trunk/}’
perlのワンライナー。
リポジトリ内のパスを書き変えている。
パスの先頭に「/」が付いていないこと、パスの最後に「/」を付けていることに注意。 - svnadmin load newrepo –parent-dir /project3
新しいリポジトリにリビジョンを追加する。ログもまるごとコピーされる。
–parent-dir を指定すると、そのパスの下に追加する。
パスの先頭に親ディレクトリを追加するだけなら、perlのワンライナーは必要無いが、やってることは同じ。
未分類コメントを書く
- svnadmin dump oldrepo1