题
我是 SVN 新手,我想知道有哪些方法可用于在 Windows 环境中备份存储库?
解决方案
你可以使用类似(Linux)的东西:
svnadmin dump repositorypath | gzip > backupname.svn.gz
由于 Windows 不支持 GZip,它只是:
svnadmin dump repositorypath > backupname.svn
其他提示
我们使用 svnadmin hotcopy,例如:
svnadmin hotcopy C:\svn\repo D:\backups\svn\repo
按照 这本书:
您可以随时运行此命令并制作存储库的安全副本,无论其他进程是否正在使用该存储库。
您当然可以压缩(最好是 7-Zip)备份副本。恕我直言,这是最简单的备份选项:万一发生灾难,除了将拉链拉回原位之外,别无他法。
Subversion 网站上提供了一个 hotbackup.py 脚本,对于自动备份非常方便。
http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in
这是一个 Perl 脚本,它将:
- 备份存储库
- 通过SCP复制到另一台服务器
- 检索备份
- 从备份创建测试存储库
- 进行测试结账
- 如果有任何错误,请通过电子邮件发送给您(通过 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`;
我用 同步, ,它将远程服务器设置为镜像/从属服务器。两周前,我们的一台服务器宕机了,我能够轻松地将从属服务器切换到主要位置(只需将从属存储库上的 UUID 重置为原始位置)。
另一个好处是同步可以由中间人运行,而不是作为任一服务器上的任务。我有一个客户端在两个 VPN 之间同步存储库。
svn备份 Google Code,一个 .NET 控制台应用程序。
您可以创建存储库备份(倾倒) 和
svnadmin dump
.然后您可以使用导入它
svnadmin load
.
详细参考SVNBook中:《使用svnadmin进行存储库数据迁移》
基本上,如果 svn 服务器停止,复制存储库文件夹是安全的。(来源: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )
因此,如果您被允许停止服务器,请执行此操作并使用某些脚本或备份工具复制存储库。Cobian Backup 非常适合这里,因为它可以自动停止和启动服务,并且可以进行增量备份,因此您只需备份最近更改的存储库部分(如果存储库很大并且您要备份到远程位置,则非常有用) )。
例子:
- 安装 Cobian 备份
添加备份任务:
将源设置为存储库文件夹(例如
C:\Repositories\
),添加预备份事件
"STOP_SERVICE"
视觉SVN,添加备份后事件,
"START_SERVICE"
视觉SVN,根据需要设置其他选项。 我们已经设置了增量备份,包括删除旧备份、备份计划、目标、压缩(包括)。档案分割等
利润!
有两种主要方法来备份 svn 服务器,第一种是 hotcopy,它将创建存储库文件的副本,这种方法的主要问题是它保存有关底层文件系统的数据,因此您在尝试重新存储时可能会遇到一些困难这种备份在另一个svn服务器类型或另一台机器上。还有另一种类型的备份称为转储,这种备份不会保存底层文件系统的任何信息,也不会保存到任何基于 tigiris.org subversion 的 SVN 服务器。
关于备份工具,您可以从命令提示符使用 svnadmin 工具(它能够进行热复制和转储),该控制台位于 svn 服务器所在的同一目录中,或者您可以通过 google 搜索 svn 备份工具。
我的建议是,您执行这两种备份,并将它们从办公室转移到您的电子邮件帐户、亚马逊 s3 服务、ftp 或 azure 服务,这样您将拥有安全的备份,而无需将 svn 服务器托管在其他地方。你的办公室。
这里有一个 GUI Windows 工具,用于转储本地和远程颠覆存储库:
https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html
工具说明中写道:
这个简单的工具允许对本地和远程颠覆存储库进行转储备份。该软件的工作方式与“svnadmin”相同,但不是其上的 GUI 前端。相反,直接使用 subversion 库允许在独立模式下创建转储,无需任何其他附加工具。
希望这有帮助...
我喜欢将整个存储库目录复制到我的备份位置。这样,如果发生什么情况,您只需将目录复制回来即可立即开始。
如果需要,请确保保留权限。通常,这只是 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备份脚本在这里.
我已经编译了我遵循的步骤,目的是备份项目的远程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/
并将拉链存放在某处。继续定期这样做。
正如其他人所说,Subversion 团队的 hot-backup.py 比普通的功能有一些不错的功能 svnadmin hotcopy
我在一个 python 脚本上运行一个计划任务,该脚本会抓取计算机上的所有存储库,并使用热备份来保留几天的热副本(对损坏的偏执)和一个 svnadmin svndump
在远程机器上。到目前为止,恢复真的很容易。
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 备份和恢复