Subversionリポジトリをエクスポート(そしてインポート)するにはどうすればよいですか?


82

商用のSVNプロバイダーを使用してソースコードを保存していたプロジェクトに取り掛かろうとしています。お客様が最終的に選択したウェブホストには、ホスティングパッケージの一部としてリポジトリが含まれているため、プロジェクトが終了したので、リポジトリをウェブホストに再配置し、商用アカウントを廃止したいと思います。

どうすればこれを行うことができますか?

回答:


69

リポジトリを移動して履歴を保持したい場合は、おそらく両方のホストでファイルシステムへのアクセスが必要になります。バックエンドが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です。または、履歴を保持したくない場合は、作業コピーを使用して新しいリポジトリにインポートできます。しかし、うまくいけば、これは当てはまりません。


28
1.7以降、リモートリポジトリの管理者権限を必要としないsvnrdumpを使用できるようになりました。コマンドは簡単です:svnrdump dump https//remote/svn/trunk > repos.dump。ほとんどの場合、コマンドはSVN 1.6でも機能しますが、いくつかの問題がある可能性があります。ドキュメントを参照してください。* nixとWindowsの両方で動作します。
アベル

34

rsvndump リポジトリをsvnrepository.comから自分が制御するUbuntuサーバーに移行するのに非常に役立ちました。

Ubuntuにrsvndumpをインストールして使用する方法:

  1. 不足している依存関係(「APR」およびSubversionライブラリ)をインストールします

    sudo apt-get install apache2-threaded-dev
    sudo apt-get install libsvn-dev
    
  2. 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
    
  3. リモートSVNリポジトリをローカルファイルにダンプします

    rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump
    
  4. 新しいリポジトリを作成し、ローカルダンプファイルにロードします

    sudo svnadmin create /opt/subversion/my_new_rep
    sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump
    

7
次に、既存の作業コピーを移行するには: svn switch --relocate http://my.svnrepository.com/svn/old_repo http://newserver.com/svn/my_new_repo
tkdave 2011年

force-uuidオプションは正確には何ですか?ソースまたは他の何かからディレクトリのアクセス許可をコピーしますか?
montag451 2014

1
UUIDは、リポジトリの「ユニバーサル一意識別子」です。UUIDが一致しない限り、再配置されたリポジトリに切り替えることはできません。後でsvnadminsetuuidコマンドを使用してUUIDを設定することも可能であることに注意してください。
tkdave 2014


9

私のブログからの抜粋-私自身へのメモ

これで、たとえばマシン/ 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

5

それを行うためのツールは

svnadmin dump

ただし、これを機能させるには、ファイルシステム-リポジトリへのアクセスが必要です。それができたら(そしてリポジトリがFSFS形式の場合)、リポジトリを新しい場所にコピーするだけです(BDB形式の場合は、ダンプ/ロードを強くお勧めします)。

ファイルシステムへのアクセス権がない場合は、リポジトリプロバイダーにダンプを提供するように依頼する必要があります(そして、リポジトリを削除してもらい、準拠することを期待します)。


5

リポジトリへのファイルアクセス権がない場合は、ダンプファイルを作成するためにrsvndump(リモートSubversionリポジトリダンプ)を使用することをお勧めします。


私はこれを今日の難しい方法で学びました。新しいsvnは古いリポジトリが破損していると考えていることがわかりました。ダンプを使用すると、これが解決されました。
フクロウ

4

基本的に、タスクを実行する方法はたくさんあります。このトピックはSVNBook |で詳細に説明されています。リポジトリデータを他の場所移行するので、本のセクションを読むことをお勧めします。

オプションの簡単な説明は次のとおりです。

  • 環境によって異なりますが、リポジトリを新しいサーバーにコピーするだけで機能する可能性が高くなります。リポジトリをコピーした後、リポジトリフックスクリプトを修正して、期待どおりに機能することを確認する必要があります。

  • svnadmin dumpおよびsvnadmin loadコマンドを使用して、フルダンプを生成し、それを別のサーバー上の別のリポジトリにロードできます。svnadmin createダンプをロードするには、新しいクリーンなリポジトリが必要になります。このアプローチはリポジトリ履歴のみを扱い、フックスクリプトとリポジトリ構成ファイルは移動しないことに注意してください。同様に、元のリポジトリへの読み取りファイルシステムアクセスが必要です。

  • Subversion 1.7以降、svnrdumpツールを使用できます。一般的に言えば、それは模倣svnadmin dumpしてsvnadmin load機能しますが、リモートで動作します。ツールはSubversionクライアントのようにリモートで動作するため(HTTPSプロトコルなど)、元のリポジトリとターゲットリポジトリへの読み取り/書き込みファイルシステムアクセス権は必要ありません。したがって、元のリポジトリへの読み取りアクセス権と、ターゲットリポジトリへの読み取り/書き込みが必要です。

  • 別のオプションは、svnadmin hotcopyコマンドを使用することです。このコマンドは主にバックアップ目的で使用され、構成スクリプトとフックスクリプトを含むリポジトリの完全なコピーを作成します。その後、ホットコピーされたリポジトリを別のサーバーに移動できます。


4

svnadmin hotcopy次のコマンドを使用することもできます。

svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH

すべてのフック、構成ファイルなどを含め、リポジトリから完全バックアップを取ります。

SVNブックの詳細


1
実際には、svnADMINホットコピーです。つまり、これもリポジトリファイルシステムへのアクセスが必要になります。
pilif

3

svnadminを実行するために必要な特権を持っていると仮定すると、dumpコマンドとloadコマンドを使用する必要があります。


3

svnリポジトリをホスティングサービスから別のサービスに移動する方法と、ローカルバックアップを実行する方法に関する記事を見つけました。

  1. リポジトリを保存する場所を定義します。

    mkdir ~/repo
    MYREPO=/home/me/someplace ## you should use full path here
    
  2. 次に、空のsvnリポジトリを作成します。 svnadmin create $MYREPO
  3. フックファイルを作成して実行可能にします。

    echo '#!/bin/sh' > $MYREPO/hooks/pre-revprop-change
    chmod +x $MYREPO/hooks/pre-revprop-change
    
  4. これで、を使用してリポジトリのインポートを開始できます。これによりsvnsync、別のリポジトリから同期するために宛先リポジトリが初期化されます。

    svnsync init file://$MYREPO http://your.svn.repo.here/
    
  5. そして、保留中のすべてのリビジョンを、初期化されたソースから宛先に転送するための最後の仕上げ:

    svnsync sync file://$MYREPO
    

これで、~/repoディレクトリにローカルのsvnリポジトリができました。

ソース:


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.