私のチームメイトの1人が、すべての履歴を維持しながら、あるSVNから別のSVNにエクスポートできるかどうかを尋ねました。
私には、これは一般的なリクエストのようです。
そのため:履歴を維持しながらSVNリポジトリ間で移行することは可能ですか?
ソースにはsvnadminのアクセス権はありませんが、デスティネーションにはアクセス権があることに注意してください。
これがソースから各リビジョンをチェックアウトし、デスティネーションにチェックインすることに帰着する場合、そのための自動化されたプロセスがあれば、それで問題ありません。
編集:宛先リポジトリがWindows上にあることを忘れていました。
[Edit:以下の元の返信はSVN 1.7より前のもので、これが問題を解決する最良の方法でした(ただし、主な用途ではありません) svnsync
)の場合。 SVN 1.7クライアント以降では、達成しようとしていることをより直接的に行う svnrdump
ツールがあります)]
svnsync を使用して、ソースを宛先に同期します(宛先リポジトリへの管理者アクセスまたは少なくともフックを追加する方法が必要ですが、特別なアクセスはありませんソースリポジトリへ)。宛先にすでにリビジョンがある場合、ソースを一時リポジトリに同期してから、 svn-merge-repos.pl
2つのローカルリポジトリをマージします。
通常これを達成する方法は svnadmin dump
コマンド 。 svnadminのアクセス権がない場合は、ダンプを提供できるかどうかを尋ねます。これにより、インポートのプロセスもはるかに簡単になります。
現在、共有リポジトリを使用していますか?これにより、リポジトリを所有している人は、ダンプを提供することに不安を感じる可能性があります。
私も同様のニーズがあり(したがってこのページにアクセスしました)、作業を行うために自分のプログラムを書くことになりました。このツールは、まだ解決策を探している他の人にとって役に立つかもしれないと思った:
誰かが興味があるなら、それをチェックしてください ここ
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
完全な変更セットを備えたバージョン管理リポジトリのみが必要な場合は、bzrをbzr-svnプラグインで使用できます。 svnリポジトリをチェックアウトすると、すべてが同期されます。