すべての履歴をコピーして、あるリポジトリから別のリポジトリにディレクトリをコピーする簡単な方法はありますか?
9 に答える
最も簡単な方法は、次を使用することです。
svnadmin dump path/to/repos > repos.out
これにより、リポジトリの移植可能な形式 (履歴付き) がファイルに作成されますrepos.out
。その後、使用できます
svnadmin load path/to/newrepos < repos.out
「ダンプされた」リポジトリを新規または既存のリポジトリにロードします。
Chapter 5. Repository Maintenance -> Migrating Repository Data Elsewheresvnadmin dump
には、バージョン 1.7 での使用に関する次の注意事項があります。
Subversion リポジトリ ダンプ形式では、バージョン管理されたリポジトリの変更のみが記述されます。コミットされていないトランザクション、ファイルシステム パスのユーザー ロック、リポジトリまたはサーバー構成のカスタマイズ (フック スクリプトを含む) などに関する情報は含まれません。
Subversion bookで提案されているように:
svnadmin dump path/to/repos_src \
| svndumpfilter include path/inside/svn/to/directory \
| svnadmin load path/to/repos_dst
例を挙げます:
svnadmin dump /var/lib/svn/old_repo \
| svndumpfilter include trunk/my_project/common_dir \
| svnadmin load /var/lib/svn/new_repo
履歴が必要ない場合は、フォルダーsvn export
なしでクリーンなフォルダーを取得してから、他のリポジトリに入れることができます。.svn
svn import
履歴では、 を使用する必要がありますsvnadmin dump
。次に、svndumpfilter
を使用する前に、使用するパーツまたはパスのみをフィルタリングするために を使用しsvnadmin load
ます。
読むトピック:
svnsync
— Subversionリポジトリミラーリングコマンドを使用します:
svnsync
Subversionリモートリポジトリミラーリングツールです。簡単に言えば、あるリポジトリのリビジョンを別のリポジトリに再生することができます。
コマンドのSubversionドキュメントにsvnsync
は、次の警告があります(バージョン1.7以降)。これは、ミラーリポジトリを変更するために他のSVNコマンドを使用した後svnsync
は、その特定のミラーで再度使用しないことを意味します。
svnsync
ミラーリング操作の一部として行われなかった、ミラーリポジトリで行われた変更に非常に敏感です。これを防ぐには、svnsync
プロセスがミラーリポジトリの変更を許可されている唯一のプロセスであることが最善です。
Subversion バージョン 1.7 には、svnrdump
リモート リポジトリにアクセスし、コマンドによって生成されるのと同じ形式のダンプ出力を生成するために使用できる新しいコマンドがありますsvnadmin dump
。これにより、 with を使用svnrdump
しsvnadmin load
て Subversion リポジトリを転送できます。
新しいコマンドの説明があるsvnrdump—Remote Subversion Repository Data Migrationを参照してください。
レッド ブックの第 5 章の「Migrating Repository Data Elsewhere 」セクションには、次のようなサブセクションを使用した「Repository data migrationsvnrdump
」セクションがあります。
svnrdump
[ と の間の]主な違いsvnadmin dump
は、リポジトリへの直接アクセスを要求する代わりにsvnrdump
、Subversion クライアントとまったく同じリポジトリ アクセス (RA) プロトコルを使用してリモートで動作することです。そのため、認証資格情報を提供する必要がある場合があります。また、リモート インタラクション [原文のまま] は、Subversion サーバーで構成された承認制限の対象となります。
また、フックなどのサーバー構成のカスタマイズに関する制限svnadmin dump
が転送されない可能性があることもsvnrdump
.
を使用してダンプ ファイルを作成し、 を使用svnadmin dump
して新しいリポジトリにインポートできますsvnadmin load
。
あるサーバーから別のバージョンにリポジトリを移行するには、次の手順に従う必要があります。
ステップ 1: すべてのリポジトリ バージョンをダンプ ファイルにダンプします。既存のリポジトリに何千ものバージョンがある可能性があります。したがって、次のスクリプトを使用してダンプ ファイルを作成できます。
ダンプ.sh
# Here “i” is the version starting number, and “j” is the maximum version number of your existing #repository.
j=4999;
for ((i=0;i<=$j;i++));
do
# your-unix-command-here
echo $i
svnadmin dump <old_server_repository_location > -r $i –incremental > <dump_location>/$i.dump
done
上記のスクリプトでは、スペースの空き状況に応じて、古いリポジトリの完全なダンプを取得することも、短い間隔でダンプを取得することもできます (つまり、0 ~ 5000、次に 5001 ~ 10000 など)。
ステップ 2: 以下のコマンドを使用して上記のスクリプトを実行します。カーネルのバージョンに応じて、以下の 2 つのクエリのいずれかを実行する必要があります。
$ bash dump.sh > stdout.sh
$ ./sh dump.sh > stdout.sh
これにより、上記のコマンドを使用して実行する必要があったすべてのコマンドが stdout.sh ファイルに書き込まれます。今後の参考のために、このファイルを追跡できます。
ステップ 3: 古いサーバーと新しいサーバーの間のポート番号 22 に対してファイアウォールが開いているかどうかを確認します。開いていない場合は、管理者に依頼して、これを使用できるようにしてください。
ステップ 4: 次のコマンドを使用して、古い SVN リポジトリから生成されたすべてのダンプ ファイルを新しいサーバーにコピーします。
$ sftp xxxx@<new_server>
Connecting to <new_server>…
Password:
sftp> mput *.dump <new_server>/dump_location
上記のコマンドでxxxx
は、操作を行っているユーザーです。sftp を実行する過程で、古いサーバーから新しいサーバーにダンプ ファイルをコピーしています。
ステップ 5: 新しいサーバーに新しいリポジトリを作成する
$ svnadmin create <new_repository>
ステップ 6: 次のスクリプトを使用して、すべてのダンプ ファイルをロードします。
load.sh
# Here “i” is the version starting number, and “j” is the maximum version number of your existing #repository.
j=4999;
for ((i=0;i<=$j;i++));
do
# your-unix-command-here
echo $i
svnadmin load –bypass-prop-validation <new_repository> < dump_location /$i.dump
done
上記の 6 つの簡単な手順に従うだけで、既存のリポジトリを新しいリポジトリに移行できます。このプロセスにより、既存のリポジトリの破損したリビジョンについて心配する必要はありません。