195

私は SVN を初めて使用し、Windows 環境でリポジトリをバックアップするためにどのような方法が利用できるか知りたいですか?

4

19 に答える 19

180

(Linux)のようなものを使用できます:

svnadmin dump repositorypath | gzip > backupname.svn.gz

Windows は GZip をサポートしていないため、次のようになります。

svnadmin dump repositorypath > backupname.svn
于 2008-08-28T18:46:35.447 に答える
107

svnadmin hotcopy を使用します。例:

svnadmin hotcopy C:\svn\repo D:\backups\svn\repo

によると

他のプロセスがリポジトリを使用しているかどうかに関係なく、いつでもこのコマンドを実行して、リポジトリの安全なコピーを作成できます。

もちろん、バックアップ コピーを ZIP (できれば 7-Zip) することもできます。IMHO これは最も簡単なバックアップ オプションです。災害が発生した場合、解凍して元の位置に戻す以外に行うことはほとんどありません。

于 2008-08-28T19:00:57.503 に答える
24

Subversion の Web サイトには、バックアップの自動化に非常に便利な hotbackup.py スクリプトがあります。

http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in

于 2008-08-28T18:53:45.010 に答える
22

以下は、次のような Perl スクリプトです。

  1. レポをバックアップする
  2. SCP経由で別のサーバーにコピーします
  3. バックアップを取得する
  4. バックアップからテスト リポジトリを作成する
  5. テストチェックアウトを行う
  6. エラーがあればメールで送信 (cron 経由)

スクリプト:

my $svn_repo = "/var/svn";  
my $bkup_dir = "/home/backup_user/backups";
my $bkup_file = "my_backup-";
my $tmp_dir = "/home/backup_user/tmp";   
my $bkup_svr = "my.backup.com";
my $bkup_svr_login = "backup";

$bkup_file = $bkup_file . `date +%Y%m%d-%H%M`;
chomp $bkup_file;
my $youngest = `svnlook youngest $svn_repo`;
chomp $youngest;

my $dump_command = "svnadmin  -q dump $svn_repo > $bkup_dir/$bkup_file ";
print "\nDumping Subversion repo $svn_repo to $bkup_file...\n";
print `$dump_command`;
print "Backing up through revision $youngest... \n";
print "\nCompressing dump file...\n";
print `gzip -9 $bkup_dir/$bkup_file\n`;
chomp $bkup_file;
my $zipped_file = $bkup_dir . "/" . $bkup_file . ".gz";
print "\nCreated $zipped_file\n";
print `scp $zipped_file $bkup_svr_login\@$bkup_svr:/home/backup/`;
print "\n$bkup_file.gz transfered to $bkup_svr\n";

#Test Backup
print "\n---------------------------------------\n";
print "Testing Backup";
print "\n---------------------------------------\n";
print "Downloading $bkup_file.gz from $bkup_svr\n";
print `scp $bkup_svr_login\@$bkup_svr:/home/backup/$bkup_file.gz $tmp_dir/`;
print "Unzipping $bkup_file.gz\n";
print `gunzip $tmp_dir/$bkup_file.gz`;
print "Creating test repository\n";
print `svnadmin create $tmp_dir/test_repo`;
print "Loading repository\n";
print `svnadmin -q load $tmp_dir/test_repo < $tmp_dir/$bkup_file`;
print "Checking out repository\n";
print `svn -q co file://$tmp_dir/test_repo $tmp_dir/test_checkout`;
print "Cleaning up\n";
print `rm -f $tmp_dir/$bkup_file`;
print `rm -rf $tmp_dir/test_checkout`;
print `rm -rf $tmp_dir/test_repo`;

スクリプト ソースと、このタイプのバックアップの理論的根拠に関する詳細。

于 2009-04-04T17:36:50.433 に答える
19

リモートサーバーをミラー/スレーブとしてセットアップするsvnsyncを使用します。2 週間前にサーバーがダウンしましたが、スレーブをプライマリ ポジションに簡単に切り替えることができました (スレーブ リポジトリの UUID を元の状態にリセットするだけで済みました)。

もう 1 つの利点は、いずれかのサーバーでタスクとしてではなく、仲介者が同期を実行できることです。2 つの VPN へのクライアントで、それらの間でリポジトリを同期させました。

于 2008-08-28T19:33:27.940 に答える
12

svnadmin ホットコピー

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

このサブコマンドは、すべてのフック、構成ファイル、そしてもちろんデータベース ファイルを含む、リポジトリの完全な「ホット」バックアップを作成します。

于 2008-08-28T18:50:14.330 に答える
10

.NET コンソール アプリケーションである Google Code でsvnbackupを実行します。

于 2010-06-02T19:39:50.523 に答える
10
  • でリポジトリのバックアップ (ダンプ) を作成できますsvnadmin dump

  • その後、 を使用してインポートできますsvnadmin load

SVNBook の詳細なリファレンス: 「svnadmin を使用したリポジトリ データの移行」

于 2008-08-28T18:48:27.830 に答える
5

基本的にはsvnサーバーが停止していればリポジトリフォルダをコピーしても安全です。(ソース: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )

したがって、サーバーを停止することが許可されている場合は、それを実行して、スクリプトまたはバックアップ ツールを使用してリポジトリをコピーするだけです。Cobian Backup は、サービスを自動的に停止および開始でき、増分バックアップを実行できるため、ここにうまく適合します。したがって、最近変更されたリポジトリの一部のみをバックアップします (リポジトリが大きく、リモートの場所にバックアップする場合に役立ちます)。 )。

例:

  1. Cobian バックアップをインストールする
  2. バックアップ タスクを追加します。

    • ソースをリポジトリ フォルダーに設定します (例: C:\Repositories\)。

    • バックアップ前イベント"STOP_SERVICE"VisualSVN を追加し、

    • バックアップ後のイベント、"START_SERVICE"VisualSVN、

    • 必要に応じて他のオプションを設定します。古いものの削除、バックアップ スケジュール、保存先、圧縮を含む増分バックアップを設定しました。アーカイブの分割など

  3. 利益!

于 2012-08-08T15:39:53.193 に答える
4

svn サーバーをバックアップするには 2 つの主な方法があります。1 つ目は、リポジトリ ファイルのコピーを作成するホットコピーです。このアプローチの主な問題は、基礎となるファイル システムに関するデータを保存することです。この種のバックアップは、別の svn サーバーの種類または別のマシンで行います。ダンプと呼ばれる別のタイプのバックアップがあります。このバックアップは、基礎となるファイル システムの情報を保存せず、tigiris.org サブバージョンに基づくあらゆる種類の SVN サーバーに移植可能です。

コマンドプロンプトからsvnadminツール(ホットコピーとダンプを実行できます)を使用できるバックアップツールについて、このコンソールはsvnサーバーが存在する同じディレクトリに存在するか、svnバックアップツールをグーグルで検索できます。

私が推奨するのは、両方の種類のバックアップを作成し、それらをオフィスからメール アカウント、Amazon s3 サービス、ftp、または azure サービスに転送することです。そうすれば、svn サーバーを外部のどこかにホストする必要なく、安全なバックアップを取得できます。あなたのオフィス。

于 2011-05-01T06:04:14.857 に答える
3

リポジトリ ディレクトリ全体をバックアップの場所にコピーするだけです。そうすれば、何か問題が発生した場合でも、ディレクトリをコピーするだけですぐに使用できるようになります。

必要に応じて、権限を保持してください。通常、これは Linux マシンでのみ問題になります。

于 2008-08-28T18:46:23.093 に答える
3

ホストされたリポジトリの場合、svn バージョン 1.7 以降で使用できます。これは、ローカル リポジトリの場合svnrdumpと似ています。svnadmin dumpこの記事では、本質的に次のように簡単に説明します。

svnrdump dump /URL/to/remote/repository > myRepository.dump

ダンプ ファイルをダウンロードしたら、ローカルにインポートできます。

svnadmin load /path/to/local/repository < myRepository.dump

または、選択したホストにアップロードします。

于 2013-12-03T22:03:12.657 に答える
3

FSFS リポジトリ形式 (デフォルト) を使用している場合は、リポジトリ自体をコピーしてバックアップを作成できます。古い BerkleyDB システムでは、リポジトリはプラットフォームに依存しないため、通常は svnadmin ダンプを使用する必要があります。

バックアップに関するsvnbook ドキュメントのトピックでsvnadmin hotcopyは、使用中のファイルなどの問題を処理するため、このコマンドを推奨しています。

于 2008-08-28T18:55:26.533 に答える
2
@echo off
set hour=%time:~0,2%
if "%hour:~0,1%"==" " set hour=0%time:~1,1%
set folder=%date:~6,4%%date:~3,2%%date:~0,2%%hour%%time:~3,2%

echo Performing Backup
md "\\HOME\Development\Backups\SubVersion\%folder%"

svnadmin dump "C:\Users\Yakyb\Desktop\MainRepositary\Jake" | "C:\Program Files\7-Zip\7z.exe" a "\\HOME\Development\Backups\SubVersion\%folder%\Jake.7z" -sibackupname.svn

これは、バックアップを実行する実行中のバッチファイルです。

于 2011-12-29T13:22:16.470 に答える
2

毎日および完全なバックアップ ソリューションの場合は、こちらの SVN バックアップ スクリプトを使用してください。

于 2009-04-26T11:18:58.383 に答える
1

プロジェクトのリモート SVN リポジトリのバックアップを取る目的で従った手順をまとめました。

install svk (http://svk.bestpractical.com/view/SVKWin32)

install svn (http://sourceforge.net/projects/win32svn/files/1.6.16/Setup-Subversion-1.6.16.msi/download)

svk mirror //local <remote repository URL>

svk sync //local

これには時間がかかり、リポジトリからログを取得していることがわかります。内に一連のファイルを作成しますC:\Documents and Settings\nverma\.svk\local

このローカル リポジトリをリモート リポジトリからの最新の変更セットで更新するには、前のコマンドを時々実行するだけです。

/home/user/.svk/localこれで、通常の SVN リポジトリであるかのように、ローカル リポジトリ (この例では) を操作できます。

このアプローチの唯一の問題は、ローカル リポジトリが、リモート リポジトリの実際のリビジョンによってインクリメントされたリビジョンで作成されることです。誰かが書いたように:

svn mirror コマンドは、作成したばかりのリポジトリにコミットを生成します。そのため、後続の同期によって作成されたすべてのコミットには、リモートのパブリック リポジトリと比較して 1 ずつインクリメントされたリビジョン番号が含まれます。

しかし、リモートリポジトリのバックアップが時々必要だったので、これは私にとっては問題ありませんでした。

検証:

確認するには、次のようにローカル リポジトリで SVN クライアントを使用します。

svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/"  <local-dir-path-to-checkout-onto>

このコマンドは、ローカル リポジトリから最新のリビジョンをチェックアウトします。最後にそれは言いChecked out revision Nます。これNは、リモート リポジトリで見つかった実際のリビジョンよりも 1 つ多くなっています (上記の問題のため)。

svk もすべての履歴を持っていることを確認するために、2、10、50-rなどを使用してさまざまな古いリビジョンで SVN チェックアウトを実行しました。その後、ファイル<local-dir-path-to-checkout-onto>がそのリビジョンのものであることが確認されました。

最後に、ディレクトリC:/Documents and Settings\nverma/.svk/local/を zip し、zip をどこかに保存します。これを定期的に続けてください。

于 2011-05-29T14:13:56.097 に答える
0

他の人が言ったように、Subversion チームの hot-backup.py には、単純なものよりも優れた機能がいくつかありますsvnadmin hotcopy

マシン上のすべてのリポジトリをスパイダーする python スクリプトでスケジュールされたタスクを実行し、ホットバックアップを使用して数日分のホットコピー (破損の偏執狂) とsvnadmin svndumpリモート マシンを保持します。それからの復元は本当に簡単です-これまでのところ。

于 2008-09-01T07:02:54.440 に答える