web-dev-qa-db-ja.com

履歴のあるリポジトリ間のSVNコピー

私のチームメイトの1人が、すべての履歴を維持しながら、あるSVNから別のSVNにエクスポートできるかどうかを尋ねました。

私には、これは一般的なリクエストのようです。

そのため:履歴を維持しながらSVNリポジトリ間で移行することは可能ですか?

ソースにはsvnadminのアクセス権はありませんが、デスティネーションにはアクセス権があることに注意してください。

これがソースから各リビジョンをチェックアウトし、デスティネーションにチェックインすることに帰着する場合、そのための自動化されたプロセスがあれば、それで問題ありません。

編集:宛先リポジトリがWindows上にあることを忘れていました。

68
John Gietzen

[Edit:以下の元の返信はSVN 1.7より前のもので、これが問題を解決する最良の方法でした(ただし、主な用途ではありません) svnsync)の場合。 SVN 1.7クライアント以降では、達成しようとしていることをより直接的に行う svnrdump ツールがあります)]


svnsync を使用して、ソースを宛先に同期します(宛先リポジトリへの管理者アクセスまたは少なくともフックを追加する方法が必要ですが、特別なアクセスはありませんソースリポジトリへ)。宛先にすでにリビジョンがある場合、ソースを一時リポジトリに同期してから、 svn-merge-repos.pl 2つのローカルリポジトリをマージします。

41
mihi

通常これを達成する方法は svnadmin dumpコマンド 。 svnadminのアクセス権がない場合は、ダンプを提供できるかどうかを尋ねます。これにより、インポートのプロセスもはるかに簡単になります。

現在、共有リポジトリを使用していますか?これにより、リポジトリを所有している人は、ダンプを提供することに不安を感じる可能性があります。

9
Lee

私も同様のニーズがあり(したがってこのページにアクセスしました)、作業を行うために自分のプログラムを書くことになりました。このツールは、まだ解決策を探している他の人にとって役に立つかもしれないと思った:

  • このツールは、ソースリポジトリへの管理者アクセスを必要としません。
  • 追加/削除/コピー/移動をサポートし、ノードプロパティ(例:svn:ignore、svn:external)およびリビジョンプロパティ(つまり、正しい作成者と日付/時刻を取得します)を保持します。
  • 新しいリビジョンを段階的にコピーすることもできます。
  • GUIとコマンドラインユーティリティの両方があります。

誰かが興味があるなら、それをチェックしてください ここ

9
Kenneth Xu

Git-svn(または別のSCMシステム)を使用してこのタスクを実行できます。

手順は次のとおりです。

1. Get a git svn clone of each repository:
    git svn clone <SVN-REPOSITORY-FROM> source-repo
    git svn clone <SVN-REPOSITORY-TO> dest-repo

 2. Create patches to be imported:
    cd source-repo/
    export commitFrom=`git log --pretty=%H | tail -1`
    git format-patch -o /tmp/mergepatchs ${commitFrom}..HEAD .

 3. Import the patches
    cd dest-repo/
    git am /tmp/mergepatchs/*.patch

参照: http://blog.neutrino.es/2012/git-copy-a-file-or-directory-from-another-repository-preserving-history/

8
scottysb

完全な変更セットを備えたバージョン管理リポジトリのみが必要な場合は、bzrをbzr-svnプラグインで使用できます。 svnリポジトリをチェックアウトすると、すべてが同期されます。

0
naan