Answers:
您可以使用类似(Linux)的方法:
svnadmin dump repositorypath | gzip > backupname.svn.gz
由于Windows不支持GZip,因此:
svnadmin dump repositorypath > backupname.svn
svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn
这将创建一个名为“ backup.7z”的文件,其中包含一个文件“ backupname.svn”,该文件是的输出svnadmin dump
。
for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
我们使用svnadmin hotcopy,例如:
svnadmin hotcopy C:\svn\repo D:\backups\svn\repo
根据这本书:
您可以随时运行此命令并为存储库创建安全副本,而不管其他进程是否在使用该存储库。
您当然可以ZIP(最好是7-Zip)备份副本。恕我直言,这是最简单的备份选项:万一发生灾难,除了将其解压缩到位之外,别无他法。
Subversion网站上有一个hotbackup.py脚本,对于自动执行备份非常方便。
http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in
这是一个Perl脚本,它将:
剧本:
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`;
我使用svnsync,它将远程服务器设置为镜像/从服务器。两周前,我们有一台服务器宕机了,我能够轻松地将从服务器切换到主要位置(只需要将从服务器存储库上的UUID重置为原始服务器)。
另一个好处是,同步可以由中间人来运行,而不是作为任一服务器上的任务来运行。我有一个客户端,可以在两个VPN之间同步存储库。
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH
此子命令对存储库进行完整的“热”备份,包括所有挂钩,配置文件,当然还有数据库文件。
您可以使用来创建存储库备份(转储)svnadmin dump
。
然后可以使用将其导入svnadmin load
。
SVNBook中的详细参考: “使用svnadmin进行存储库数据迁移”
基本上,如果svn服务器已停止,则复制存储库文件夹是安全的。(来源:https : //groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D)
因此,如果允许您停止服务器,请执行该操作,然后仅使用某些脚本或备份工具复制存储库。Cobian Backup非常适合此处,因为它可以自动停止和启动服务,并且可以执行增量备份,因此您仅备份最近更改的存储库部分(如果存储库很大且要备份到远程位置,则很有用)。
例:
添加备份任务:
将源设置为存储库文件夹(例如C:\Repositories\
),
添加备份前事件"STOP_SERVICE"
VisualSVN,
添加备份后事件,"START_SERVICE"
VisualSVN,
根据需要设置其他选项。我们已经设置了增量备份,包括删除旧备份,备份计划,目标,压缩等。档案分割等
利润!
有两种主要的方法来备份svn服务器,首先是hotcopy,它将创建存储库文件的副本,这种方法的主要问题是它会保存有关基础文件系统的数据,因此尝试重新存储可能会遇到一些困难另一种svn服务器类型或另一台计算机上的这种备份。还有另一种称为转储的备份,该备份不会保存基础文件系统的任何信息,并且不会存储到任何基于tigiris.org subversion的SVN服务器中。
关于备份工具,您可以从命令提示符下使用svnadmin工具(它可以进行热复制和转储),此控制台位于svn服务器所在的目录中,或者您可以在Google上搜索svn备份工具。
我的建议是您同时进行两种备份,并将它们从办公室移出到您的电子邮件帐户,亚马逊s3服务,ftp或azure服务,这样您将获得安全的备份,而不必将svn服务器托管在其他地方你的办公室。
这里是一个GUI Windows工具,用于转储本地和远程Subversion存储库:
https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html
工具说明如下:
这个简单的工具允许对本地和远程Subversion存储库进行转储备份。该软件的工作方式与“ svnadmin”相同,但不是其GUI前端。而是直接使用Subversion库,以允许在独立模式下创建转储而无需任何其他工具。
希望这个帮助...
我只想将整个repo目录复制到我的备份位置。这样,如果发生什么情况,您可以将目录复制回去并准备立即进行。
只需确保保留权限(如果需要)。通常,这仅是Linux计算机上的一个问题。
如果使用的是FSFS存储库格式(默认),则可以复制存储库本身以进行备份。对于较旧的BerkleyDB系统,存储库不是独立于平台的,因此通常需要使用svnadmin dump。
有关备份的svnbook文档主题建议使用此svnadmin hotcopy
命令,因为它将处理诸如文件使用等问题。
@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
这是我正在运行的用于执行备份的批处理文件
我已经按照我的步骤进行了编译,目的是备份项目的远程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存储库一样使用本地存储库(在本示例中)!
这种方法的唯一问题是,本地存储库是通过远程存储库中的实际修订版以修订版增量创建的。正如某人写道:
svk miror命令在刚刚创建的存储库中生成提交。因此,与远程公共存储库相比,后续同步创建的所有提交的修订版本号都将增加一。
但是,这对我来说还可以,因为我只想不时备份远程存储库,别无其他。
验证:
要进行验证,请将SVN客户端与本地存储库一起使用,如下所示:
svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/" <local-dir-path-to-checkout-onto>
然后,该命令将从本地存储库签出最新修订版。最后说Checked out revision N
。这N
比在远程存储库中找到的实际修订版本要多(由于上述问题)。
为了验证svk是否也带来了所有历史记录,在SVN签出中使用-r
了2、10、50等各种旧版本进行了运行。然后<local-dir-path-to-checkout-onto>
确认文件来自该版本。
最后,压缩目录C:/Documents and Settings\nverma/.svk/local/
并将其存储在某处。继续定期这样做。
1.1从SVN(Subversion)存储库创建转储
svnadmin dump /path/to/reponame > /path/to/reponame.dump
真实的例子
svnadmin dump /var/www/svn/testrepo > /backups/testrepo.dump
1.2 Gzip创建的转储
gzip -9 /path/to/reponame.dump
真实的例子
gzip -9 /backups/testrepo.dump
1.3带有单线的SVN转储和Gzip转储
svnadmin dump /path/to/reponame | gzip -9 > /path/to/reponame.dump.gz
真实的例子
svnadmin dump /var/www/svn/testrepo |Â gzip -9 > /backups/testrepo.dump.gz
如何在Linux上备份(转储)和还原(加载)SVN(Subversion)存储库。
参考: SVN Subversion备份和还原