1. ホーム
  2. svn

[解決済み] Subversionのリポジトリをエクスポート(その後インポート)するには?

2023-06-10 17:15:06

質問

私は、ソース コードを保存するために商用 SVN プロバイダーを使用していたプロジェクトについて、ちょうど終了したところです。顧客が最終的に選んだ Web ホストは、ホスティング パッケージの一部としてリポジトリを含んでいるので、プロジェクトが終了した今、私は彼らの Web ホストにリポジトリを移し、商用アカウントを停止したいと思います。

これを行うにはどうしたらよいでしょうか。

どのように解決するのですか?

リポジトリを移動して履歴を残したい場合、おそらく両方のホストでファイルシステムにアクセスする必要があるでしょう。 バックエンドが 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 log を使って新しいリポジトリで各リビジョンを再生し、その後でメタデータを修正しなければならないでしょう。 これを行うには pre-revprop-change と post-revprop-change フックスクリプトが必要で、これはファイルシステムへのアクセスを仮定しているので、YMMVです。 また、履歴を残したくない場合は、作業コピーを使用して新しいリポジトリにインポートすることができます。 しかし、これがそうでないことを望みます。