Q:Subversionの一部のリポジトリをトラックパスに移行し、開発後に元のリポジトリに戻したい
- 社内リポジトリをすべてtracpathに移行することはできないため、一部のプログラムのみtracpathに移行したい。
- 移行は履歴付きのダンプデータ(可能であれば)を、tracpathのリポジトリにインポートしたい
- また開発完了後は社内リポジトリに戻したい
A:Subversionによる運用方法を検証しました
Subversionの特定フォルダを出力し、tracpathにインポートします。tracpath上での開発完了後、tracpathで更新したリポジトリをローカルのリポジトリにロードする方法を検証いたしました。 手順は複雑ですが、更新履歴付きのインポートが可能です。
手順
元リポジトリから svnadmin dump でダンプファイルを作成する
$ svnadmin dump /path/to/repos > repos.svndump
svndumpfilter include|exclude を用いて特定のパスのものだけにしたダンプファイルを作成する
$ svndumpfilter include --drop-empty-revs /trunk/modulename < repos.svndump > repos-filtered.svndump
svnadmin load を使って 2 で作成したダンプファイルをロードし期待している状態なのかを確認する
- svndumpfilter include /trunk/modulename のように対象のパスが2階層以上の場合には、そのパスを格納するディレクトリが作成されていない状態になるので svnadmin load が失敗する。その場合は手動でそのディレクトリを作成する - 期待している状態になるまで 2, 3 を繰り返す - svnadmin load した際に最終リビジョンがいくつになったか記録しておく
$ svnadmin create /tmp/repos-filtered $ svn mkdir --parents file:///tmp/repos-filtered/trunk # 対象パスを格納するディレクトリを作成する $ svnadmin load /tmp/repos-filtered < repos-filtered.svndump
- 期待している状態が確認できたら、確認用に作成したリポジトリをダンプする
$ svnadmin dump /tmp/repos-filtered > repos-filtered.svndump
- 作成したフィルター済みのダンプファイルを tracpath へインポートする
- (tracpath 上のリポジトリを更新...)
svnsync を用いて tracpath 上のリポジトリのコピーをローカルに作成する
svnadmin dump --incremental -r<REV>:HEAD で 3 で記録したリビジョンの続きからダンプする
- 3 で記録したリビジョンが 42 であれば -r43:HEAD を指定する - 6 でローカル上に作成したリポジトリのコピーを用いる
svnadmin load で 7 のダンプを元リポジトリにロードする
- - ロード前に元リポジトリのバックアップを作成しておくことをお勧めします
関連FAQ