いくつかのリポジトリがあり、履歴ログを保持する別のリポジトリのサブフォルダにある各リポジトリのコンテンツを変換する必要があります...どうすればよいですか?
2 に答える
タスクを実行するには2つの方法があります。Subversionサーバーの分散とタスクの複雑さに応じて、一方が他方よりも簡単または便利であることがわかります。
svndumpfilter
ツールを使用したリポジトリ履歴のフィルタリング
Subversionリポジトリの履歴フィルタリングは、リポジトリダンプ出力に含めるまたは除外するように指定したパスに基づいて機能するため、このソリューションは非常に注意が必要です。つまり、次のことを行う必要があります。
- 現在のリポジトリを
svnadmin dump
、でダンプします - 、を使用して、ダンプ内の必要なリポジトリパスのみを除外します
svndumpfilter
。 - フィルタリングされたダンプを。を使用して別のリポジトリにロードします
svnadmin load
。
svnrdump
ツール(SVN 1.7以降に存在)を使用して、ダンプおよびロードプロセスをリモートで実行することもできます。svnrdump dump
およびを参照してくださいsvnrdump load
。
プロセスに関連するSVNBookの次の記事を読むことを強くお勧めします。
このリポジトリにリポジトリC:\ Repository\REPOとフォルダ/trunk/abcがあるとします。フォルダ/trunk/ abcを別のリポジトリC:\ Repository\REPO2に移動するためのサンプル手順を参照してください。
/ trunk/abcパスとその子孫に影響を与えるすべてのコミットが他のパスに影響を与えないことを確認してください。たとえば、ファイルを/ trunk /abcと/another_folderに同時に追加したり、ファイルを/another_folderから/trunk/abcにコピーしたりするコミットはありません。
REPOリポジトリのダンプを作成します。
svnadmin dump C:\Repositories\REPO > REPO.dump
REPO.dumpファイルから不要なパスを除外します。
svndumpfilter include /trunk/ABC < REPO.dump > filtered.dump
C:\ Repository\REPO2リポジトリに空の/loadedフォルダーを作成します。
そのフォルダにダンプをロードします。
svnadmin load --parent-dir /loaded C:\Repositories\REPO2 < filtered.dump
それでおしまい!
svnsync
ツールを使用したリポジトリの複製
このソリューションもトリッキーですが、複雑なリポジトリフィルタリングは、上記のアプローチよりも少し便利な場合があります。
このアプローチは、リポジトリ履歴から除外する必要のあるパスへの読み取りアクセスを拒否するパスベースの承認ルールを構成した後、リポジトリを複製することです。svnsync
とは異なりsvndumpfilter
、svnsync
読み取り不可能なソースパスを使用したコピー操作を通常の追加に自動的に変換します。これは、コピー操作を含む履歴をフィルタリングする必要がある場合に役立ちます。
あなたの質問を読んだ後、私はこの問題を解決するユーティリティを作成することにしました。ユーティリティはSVNKitライブラリに 基づいており、https: //sourceforge.net/projects/svnkitfilterにあります。
とにかく走れ
$ svnadmin create svn.repo
$ svnkitfilter SRC_URL_1 file:///path/to/svn.svn --prefix prefix/for/repository1
$ svnkitfilter SRC_URL_2 file:///path/to/svn.svn --prefix prefix/for/repository2
...
$ svnkitfilter SRC_URL_N file:///path/to/svn.svn --prefix prefix/for/repositoryN