9

いくつかのリポジトリがあり、履歴ログを保持する別のリポジトリのサブフォルダにある各リポジトリのコンテンツを変換する必要があります...どうすればよいですか?

4

2 に答える 2

18

タスクを実行するには2つの方法があります。Subversionサーバーの分散とタスクの複雑さに応じて、一方が他方よりも簡単または便利であることがわかります。

svndumpfilterツールを使用したリポジトリ履歴のフィルタリング

Subversionリポジトリの履歴フィルタリングは、リポジトリダンプ出力に含めるまたは除外するように指定したパスに基づいて機能するため、このソリューションは非常に注意が必要です。つまり、次のことを行う必要があります。

  1. 現在のリポジトリをsvnadmin dump、でダンプします
  2. 、を使用して、ダンプ内の必要なリポジトリパスのみを除外しますsvndumpfilter
  3. フィルタリングされたダンプを。を使用して別のリポジトリにロードしますsvnadmin load

svnrdumpツール(SVN 1.7以降に存在)を使用して、ダンプおよびロードプロセスをリモートで実行することもできます。svnrdump dumpおよびを参照してくださいsvnrdump load

プロセスに関連するSVNBookの次の記事を読むことを強くお勧めします。

  1. リポジトリ履歴のフィルタリング
  2. svnadmin dump
  3. svnadmin load
  4. svnrdump dump
  5. svnrdump load
  6. svndumpfilter

このリポジトリにリポジトリC:\ Repository\REPOとフォルダ/trunk/abcがあるとします。フォルダ/trunk/ abcを別のリポジトリC:\ Repository\REPO2に移動するためのサンプル手順を参照してください。

  1. / trunk/abcパスとその子孫に影響を与えるすべてのコミットが他のパスに影響を与えないことを確認してください。たとえば、ファイルを/ trunk /abc/another_folderに同時に追加したり、ファイルを/another_folderから/trunk/abcにコピーしたりするコミットはありません。

  2. REPOリポジトリのダンプを作成します。

    svnadmin dump C:\Repositories\REPO > REPO.dump

  3. REPO.dumpファイルから不要なパスを除外します。

    svndumpfilter include /trunk/ABC < REPO.dump > filtered.dump

  4. C:\ Repository\REPO2リポジトリに空の/loadedフォルダーを作成します。

  5. そのフォルダにダンプをロードします。

    svnadmin load --parent-dir /loaded C:\Repositories\REPO2 < filtered.dump

それでおしまい!

svnsyncツールを使用したリポジトリの複製

このソリューションもトリッキーですが、複雑なリポジトリフィルタリングは、上記のアプローチよりも少し便利な場合があります。

このアプローチは、リポジトリ履歴から除外する必要のあるパスへの読み取りアクセスを拒否するパスベースの承認ルールを構成した後、リポジトリを複製することです。svnsync

とは異なりsvndumpfiltersvnsync読み取り不可能なソースパスを使用したコピー操作を通常の追加に自動的に変換します。これは、コピー操作を含む履歴をフィルタリングする必要がある場合に役立ちます。

于 2012-07-22T07:54:27.670 に答える
1

あなたの質問を読んだ後、私はこの問題を解決するユーティリティを作成することにしました。ユーティリティは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
于 2012-08-02T02:05:30.590 に答える