商用のSVNプロバイダーを使用してソースコードを保存していたプロジェクトに取り掛かろうとしています。お客様が最終的に選択したウェブホストには、ホスティングパッケージの一部としてリポジトリが含まれているため、プロジェクトが終了したので、リポジトリをウェブホストに再配置し、商用アカウントを廃止したいと思います。
どうすればこれを行うことができますか?
商用のSVNプロバイダーを使用してソースコードを保存していたプロジェクトに取り掛かろうとしています。お客様が最終的に選択したウェブホストには、ホスティングパッケージの一部としてリポジトリが含まれているため、プロジェクトが終了したので、リポジトリをウェブホストに再配置し、商用アカウントを廃止したいと思います。
どうすればこれを行うことができますか?
回答:
リポジトリを移動して履歴を保持したい場合は、おそらく両方のホストでファイルシステムへのアクセスが必要になります。バックエンドがFSFS(最近のバージョンのデフォルト)である場合の最も簡単な解決策は、リポジトリフォルダー全体のファイルシステムコピーを作成することです。
Berkley DBバックエンドを使用している場合、バックエンドが何かわからない場合、またはSVNのバージョン番号を変更する場合は、svnadminを使用して古いリポジトリをダンプし、新しいリポジトリにロードする必要があります。リポジトリ。を使用svnadmin dump
すると、新しいシステムにコピーできる単一のファイルバックアップが得られます。次に、新しい(空の)リポジトリを作成して使用できますsvnadmin load
。これにより、基本的にすべてのコミットがメタデータ(作成者、タイムスタンプなど)とともに再生されます。
ダンプ/ロードプロセスの詳細については、こちらをご覧ください。
http://svnbook.red-bean.com/en/1.8/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate
また、そうする場合はsvnadmin load
、必ずこの--force-uuid
オプションを使用してください。そうしないと、新しいリポジトリへの切り替えで問題が発生します。SubversionはUUIDを使用してリポジトリを内部的に識別し、作業コピーを別のリポジトリに切り替えることはできません。
ファイルシステムへのアクセス権がない場合は、移行に役立つ他のサードパーティオプションがある可能性があります(または何かを書くことができます)。基本的に、svnログを使用して新しいリポジトリで各リビジョンを再生する必要があります。その後、メタデータを修正します。これを行うには、pre-revprop-changeおよびpost-revprop-changeフックスクリプトが必要です。これは、ファイルシステムアクセスを想定しているため、YMMVです。または、履歴を保持したくない場合は、作業コピーを使用して新しいリポジトリにインポートできます。しかし、うまくいけば、これは当てはまりません。
rsvndump
リポジトリをsvnrepository.comから自分が制御するUbuntuサーバーに移行するのに非常に役立ちました。
不足している依存関係(「APR」およびSubversionライブラリ)をインストールします
sudo apt-get install apache2-threaded-dev
sudo apt-get install libsvn-dev
rsvndumpをインストールします
wget http://prdownloads.sourceforge.net/rsvndump/rsvndump-0.5.5.tar.gz
tar xvfz rsvndump-0.5.5.tar.gz
cd rsvndump-0.5.5
./configure
make
sudo make install
リモートSVNリポジトリをローカルファイルにダンプします
rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump
新しいリポジトリを作成し、ローカルダンプファイルにロードします
sudo svnadmin create /opt/subversion/my_new_rep
sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump
svn switch --relocate http://my.svnrepository.com/svn/old_repo http://newserver.com/svn/my_new_repo
svnsyncを使用することもできます。これには、ソースリポジトリへの読み取り専用アクセスのみが必要です
これで、たとえばマシン/ Subversionバージョン間で移行する場合など、ダンプファイルをインポートできます。たとえば、以下に示すように、ソースリポジトリからダンプファイルを作成し、それを新しいリポジトリにロードした場合です。
Unixライクなシステム用のコマンド(ターミナルから):
svnadmin dump /path/to/your/old/repo > backup.dump
svnadmin load /path/to/your/new/repo < backup.dump.dmp
Microsoft Windowsシステム用のコマンド(cmdシェルから):
svnadmin dump C:\path\to\your\old\repo > backup.dump
svnadmin load C:\path\to\your\old\repo < backup.dump
基本的に、タスクを実行する方法はたくさんあります。このトピックはSVNBook |で詳細に説明されています。リポジトリデータを他の場所に移行するので、本のセクションを読むことをお勧めします。
オプションの簡単な説明は次のとおりです。
環境によって異なりますが、リポジトリを新しいサーバーにコピーするだけで機能する可能性が高くなります。リポジトリをコピーした後、リポジトリフックスクリプトを修正して、期待どおりに機能することを確認する必要があります。
svnadmin dump
およびsvnadmin load
コマンドを使用して、フルダンプを生成し、それを別のサーバー上の別のリポジトリにロードできます。svnadmin create
ダンプをロードするには、新しいクリーンなリポジトリが必要になります。このアプローチはリポジトリ履歴のみを扱い、フックスクリプトとリポジトリ構成ファイルは移動しないことに注意してください。同様に、元のリポジトリへの読み取りファイルシステムアクセスが必要です。
Subversion 1.7以降、svnrdump
ツールを使用できます。一般的に言えば、それは模倣svnadmin dump
してsvnadmin load
機能しますが、リモートで動作します。ツールはSubversionクライアントのようにリモートで動作するため(HTTPSプロトコルなど)、元のリポジトリとターゲットリポジトリへの読み取り/書き込みファイルシステムアクセス権は必要ありません。したがって、元のリポジトリへの読み取りアクセス権と、ターゲットリポジトリへの読み取り/書き込みが必要です。
別のオプションは、svnadmin hotcopy
コマンドを使用することです。このコマンドは主にバックアップ目的で使用され、構成スクリプトとフックスクリプトを含むリポジトリの完全なコピーを作成します。その後、ホットコピーされたリポジトリを別のサーバーに移動できます。
svnリポジトリをホスティングサービスから別のサービスに移動する方法と、ローカルバックアップを実行する方法に関する記事を見つけました。
リポジトリを保存する場所を定義します。
mkdir ~/repo
MYREPO=/home/me/someplace ## you should use full path here
svnadmin create $MYREPO
フックファイルを作成して実行可能にします。
echo '#!/bin/sh' > $MYREPO/hooks/pre-revprop-change
chmod +x $MYREPO/hooks/pre-revprop-change
これで、を使用してリポジトリのインポートを開始できます。これによりsvnsync
、別のリポジトリから同期するために宛先リポジトリが初期化されます。
svnsync init file://$MYREPO http://your.svn.repo.here/
そして、保留中のすべてのリビジョンを、初期化されたソースから宛先に転送するための最後の仕上げ:
svnsync sync file://$MYREPO
これで、~/repo
ディレクトリにローカルのsvnリポジトリができました。
ソース:
SVNリポジトリーの移行については、第5章「リポジトリー管理」、「リポジトリーの移行」を参照してください。
このアプローチでは、svnadminにアクセスする必要があります。
svnrdump dump https//remote/svn/trunk > repos.dump
。ほとんどの場合、コマンドはSVN 1.6でも機能しますが、いくつかの問題がある可能性があります。ドキュメントを参照してください。* nixとWindowsの両方で動作します。