web-dev-qa-db-ja.com

リモートSVNリポジトリをバックアップする方法

現在、SVNサーバーをホームサーバーからリモートサーバーに移動しているので、他の場所から簡単にアクセスできます。リモートサーバーがバックアップされていないため、定期的にホームサーバーにバックアップしたいと考えています。

リモートサーバーはWindows 2003サーバーです。ホームサーバーはWindows Home Serverです。

これを行う最良の方法は何ですか?ホームサーバーで毎晩リモートサーバーのダンプを取得できますか?帯域幅は大きな考慮事項ではありませんが、新しいチェックインをホームサーバーのSVNサーバーにコピーできれば問題ありません。

どんな提案も歓迎します。

49
Roaders

svnsync コマンドを使用するだけです。

まず、ホームマシンに新しいリポジトリを作成します。

svnadmin create c:\backuprepo

またはUnixの場合:

svnadmin create ./backuprepo

次に、pre-revprop-change.batという名前のファイルを作成します。

echo exit 0 > c:\backuprepo\hooks\pre-revprop-change.bat

またはUnixの場合:

echo -ne '#!/bin/sh\nexit 0' > ./backuprepo/hooks/pre-revprop-change
chmod ugo+x ./backuprepo/hooks/pre-revprop-change 

次に、同期を初期化します。

svnsync init file:///c:/backuprepo https://url/of/your/repository

またはUnixの場合:

svnsync init file:///Volumes/volumelabel/backuprepo https://url/of/your/repository

その後、単純に実行できます

svnsync sync file:///c:/backuprepo

1日に1回程度、バックアップリポジトリにまだない変更のみを取得します。最初は少し時間がかかりますが、バックアップリポジトリを実際のリポジトリと同期した後、同期する必要があるのは新しいリビジョンのみを同期する必要があるため、同期に数秒しかかかりません。

116
Stefan

Subversion 1.7以降では、新しいコマンド svnrdump も使用できます。ドキュメントから:

ダンプ、つまりSOURCE_URLにあるリポジトリアイテムのリビジョンのリポジトリダンプストリームを生成し、情報を標準出力に出力します。

使用法は次のとおりです。

svnrdump dump http://example.com/repos/ > repos.dump

これにより、repos.dumpにリポジトリの「ダンプファイル」が作成されます。これは、履歴を含むリポジトリデータの完全なバックアップですが、Subversionクライアントから直接読み取ることはできません。このデータを復元する必要がある場合は、標準のsvnadminツールを使用します。

svnadmin create c:\backup-repos
svnadmin load c:\backup-repose < repos.dump

テストはまだ行っていませんが、svnsyncよりも遅くなる可能性があります。 svnrdumpは、リポジトリの完全なダンプを毎回実行します。ここで、synsyncは、リポジトリが最後に実行されてからの変更のみをインポートすると想定しています。ただし、リポジトリ全体を含む単一のファイルが作成され、管理が容易になる場合とそうでない場合があります。

svnrdumpからgzipまたは同様のプログラムの出力をパイプ処理して、出力されるファイルのサイズを大幅に減らすことができます。

17
joesdiner

ローカルリポジトリを作成する

svnadmin create /Users/jsmith/repo

空のpre-revprop-changeフックスクリプトを作成する

echo '#!/bin/bash' > /Users/jsmith/repo/hooks/pre-revprop-change

pre-revprop-changeフックスクリプトを実行可能にする

chmod +x /Users/jsmith/backup/hooks/pre-revprop-change

svnsyncを初期化する

svnsync init file:////Users/jsmith/repo https://www.smith.com/repo

リポジトリを同期

svnsync sync file:////Users/jsmith/repo

11
yanokwa

rsync (またはその上にWindows UIである DeltaCopy )は、リポジトリ全体をファイルシステムレベルで段階的にコピーするのに適しています。

svnsync を使用して、新しいリビジョンを1つのSVNサーバーから別のサーバーに直接コピーすることもできます。

7
Wim

リモートサーバーでスクリプトを使用して、リポジトリをダンプし、それをローカルコンピューターにコピーする(または、ローカルコンピューターにコピーするための定義済みの場所に残しておく)

rsync または scp を使用してバックアップディレクトリを同期できます。

このスクリプトは「スケジュールされたタスク」で実行でき、一意の名前が付けられたバックアップファイルを作成できます。これは、後でローカルコンピューターによって上記の方法で同期されます。 (そしておそらく削除されます)

2
EFraim

EFraimは、私がこれを書いたときにrsyncについて言及しました。

これを使いたくない場合は、Subversion Bookでsvnadmin dump --incrementalオプションを提供しています。

ただし、これを正常に行うには、リビジョン番号を調整する必要があります。未加工のリポジトリデータディレクトリをrsyncする方が簡単です。

難しいのは、ローカルとリモートのマシンが安全に通信できるようにrsyncを設定することです(つまり、2003サーバーにSSHサービスを設定します)。 Wimが言及しているDeltaCopyは非常に興味深いものであり、私の最初のショットになります。コマンドライン操作の場合のみ、ここに RsyncをWindows 2003でサービスとして実行する方法 のハウツーがあります。

2
Pekka 웃

svnsyncまたはsvnadmin hotcopyのいずれかを使用します。これらの手法はどちらも、トランザクションが進行中であっても、リポジトリから有効なデータをコピーすることが保証されているためです。他のファイル同期手法は、リポジトリの形式によっては、信頼性が低い場合があります。

1
Damian Powell

Stefansの回答をさらに詳しく説明するために、プロセスを少し自動化するのに役立つWindowsバッチスクリプトをいくつか示します。

svn-backup-init.bat

@echo off
set /P directory="Local Directory: "
set /P URL="Svn URL: "

echo "Running SVN backup";

@echo on
svnadmin create %directory%
echo exit 0 > %directory%\hooks\pre-revprop-change.bat
svnsync init file:///%directory% %URL%
svnsync sync file:///%directory%**strong text**

このスクリプトはsvnリポジトリを作成し、チェックアウトしてすぐに同期します。スクリプトを実行するときは、ディレクトリを入力してリポジトリをローカルに置き、使用するサーバーのURLを入力します。

svn-backup-run.bat

for /d %%i in (%~dp0*) do ( svnsync sync file:///%%i ) 

これは各ディレクトリをループしてsvnsyncコマンドを実行します。複数のリポジトリがある場合は、それらを同じフォルダにチェックアウトします。その後、これをWindowsのタスクとして簡単に追加して、すべてのリポジトリを一度に更新できます。

フォルダ構造

私はそのようなフォルダー構造を使用しています:

.
├── svn-backups
|   ├── repo-1
|   ├── repo-2
|   ├── repo-3
|   ├── svn-backup-init.bat
|   └── svn-backup-run.bat
0
Joe Jankowiak

Mac OS X 10.10では、svnrdumpコマンドは次の場所にあります。

  • /Library/Developer/CommandLineTools/usr/bin/svnrdump

その後、joesdinerによって上記の答えを使用できます。

0