svnでリポジトリを他のリポジトリの配下に入れたくなった

1. 始めに

svnでリポジトリを跨いだディレクトリとかのコピー、インポートをしたくなった。

具体的には hoge, fuga というリポジトリがあるんだけど、hogeリポジトリをfugaリポジトリの中のディレクトリ、fuga/hogeに入れたくなった。

svnadminにdump, loadがあるのでそれでできないかな、ということで試してみた。

2. コマンド

結論から行くといけた。手順を追ってみる。


shell> cd fuga; mkdir hoge; svn add hoge; svn ci hoge –m ‘add hoge dir.’

shell> ssh svnhost

shell> svnadmin dump /path/to/repositories/hoge \
| sed -e 's/Node-path: /Node-path: hoge\//'  \
| sed -e 's/Node-copyfrom-path: /Node-copyfrom-path: hoge\//' \
| sudo svnadmin load /path/to/repositories/fuga

まずはインポート先のディレクトリを作っておく。

その後はsvnのホストに移動する。ここではリポジトリの実パスを /path/to/repositories としてある。

実際に作業をする前にはsvnの提供をやめてコールドバックアップを取っておいたほうがいいと思う。

(service svnserve stop; service httpd stop; tar zcvf /tmp/repositories.tar.gz /path/to/repositories; などなど)

次に実際にダンプ、インポートとしていく。そのときに途中でsedを使って対象ファイルの相対位置を変えてやる。

具体的にはNode-pathで始まる行、Node-copyfrom-pathで始まる行をそれぞれ書き換えてやる事に。

この辺は他のサイトを参照してみた。

http://blog.fredrikbostrom.net/2007/03/14/migrating-part-of-repository-in-svn

どんな中身がloadされるかは確認しながら行いましょう。

どうやらうまくいったみたいだけど、後のrivision番号の方が日時が遅いという自体に。まぁその通りなんだけど。それでいいです。

コメントを残す