現在、SVNサーバーをホームサーバーからリモートサーバーに移動しているので、他の場所から簡単にアクセスできます。リモートサーバーがバックアップされていないため、定期的にホームサーバーにバックアップしたいと考えています。
リモートサーバーはWindows 2003サーバーです。ホームサーバーはWindows Home Serverです。
これを行う最良の方法は何ですか?ホームサーバーで毎晩リモートサーバーのダンプを取得できますか?帯域幅は大きな考慮事項ではありませんが、新しいチェックインをホームサーバーのSVNサーバーにコピーできれば問題ありません。
どんな提案も歓迎します。
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回程度、バックアップリポジトリにまだない変更のみを取得します。最初は少し時間がかかりますが、バックアップリポジトリを実際のリポジトリと同期した後、同期する必要があるのは新しいリビジョンのみを同期する必要があるため、同期に数秒しかかかりません。
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
または同様のプログラムの出力をパイプ処理して、出力されるファイルのサイズを大幅に減らすことができます。
ローカルリポジトリを作成する
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
EFraimは、私がこれを書いたときにrsyncについて言及しました。
これを使いたくない場合は、Subversion Bookでsvnadmin dump --incremental
オプションを提供しています。
svnadmin dump --incremental
の例がありますただし、これを正常に行うには、リビジョン番号を調整する必要があります。未加工のリポジトリデータディレクトリをrsyncする方が簡単です。
難しいのは、ローカルとリモートのマシンが安全に通信できるようにrsyncを設定することです(つまり、2003サーバーにSSHサービスを設定します)。 Wimが言及しているDeltaCopyは非常に興味深いものであり、私の最初のショットになります。コマンドライン操作の場合のみ、ここに RsyncをWindows 2003でサービスとして実行する方法 のハウツーがあります。
svnsync
またはsvnadmin hotcopy
のいずれかを使用します。これらの手法はどちらも、トランザクションが進行中であっても、リポジトリから有効なデータをコピーすることが保証されているためです。他のファイル同期手法は、リポジトリの形式によっては、信頼性が低い場合があります。
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
Mac OS X 10.10では、svnrdump
コマンドは次の場所にあります。
/Library/Developer/CommandLineTools/usr/bin/svnrdump
その後、joesdinerによって上記の答えを使用できます。