SVNリポジトリの履歴をサブフォルダとして別のリポジトリに移動する




version-control repository (2)

タスクを達成するには2つの方法があります。 Subversionサーバの配布とタスクの複雑さによっては、それらのうちの1つが他のものより簡単で便利な場合があります。

svndumpfilterツールを使用してリポジトリ履歴をフィルタリングする

Subversionリポジトリ履歴フィルタリングは、指定したパスに基づいて動作するため、レポ・ダンプ出力に含めたり除外したりするため、解決策は非常に難解です。 要するに、以下のことを行うべきです:

  1. 現在のリポジトリをsvnadmin dump
  2. svndumpfilterして、ダンプ内の必要なリポジトリー・パスのみをsvndumpfilter
  3. svnadmin loadを使用して、フィルタされたダンプを別のリポジトリに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:\ Repositories \ REPOというリポジトリとfolder / trunk / abcというリポジトリがあるとします。 フォルダ/ trunk / abcを別のリポジトリC:\ Repositories \ 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:\ Repositories \ REPO2リポジトリに作成します。

  5. そのフォルダにダンプをロードする:

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

それでおしまい!

svnsyncツールによるリポジトリの複製

解決策も複雑ですが、複雑なリポジトリのフィルタリングは、上記の手法よりもずっと便利です。

このアプローチは、リポジトリ履歴からフィルタリングする必要のあるパスへの読み取りアクセスを拒否するパスベースの認可ルールを設定した後でsvnsyncを使用してリポジトリ複製することです

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

私はいくつかのリポジトリを持っており、それぞれの内容を別のリポジトリのサブフォルダに変換して履歴ログを保存する必要があります ...どうすればいいですか?


Answer #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




svndump