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

根据

您可以随时运行此命令并制作存储库的安全副本,无论其他进程是否正在使用该存储库。

您当然可以压缩(最好是 7-Zip)备份副本。恕我直言,这是最直接的备份选项:万一发生灾难,除了将其解压缩回原位外,别无他法。

于 2008-08-28T19:00:57.503 回答
24

Subversion 网站上有一个 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,它将远程服务器设置为镜像/从属服务器。两周前我们有一台服务器停机,我能够很容易地将从属切换到主位置(只需要将从属存储库上的 UUID 重置为原始位置)。

另一个好处是同步可以由中间人运行,而不是作为任一服务器上的任务。我有两个 VPN 的客户端在它们之间同步一个存储库。

于 2008-08-28T19:33:27.940 回答
12

svnadmin 热拷贝

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

此子命令对存储库进行完整的“热”备份,包括所有挂钩、配置文件,当然还有数据库文件。

于 2008-08-28T18:50:14.330 回答
10

SVNBook中的详细参考: 《Repository data migration using svnadmin》

于 2008-08-28T18:48:27.830 回答
10

.NET 控制台应用程序 Google Code 上的svnbackup

于 2010-06-02T19:39:50.523 回答
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 服务器有两种主要方法,第一种是 hotcopy,它会创建存储库文件的副本,这种方法的主要问题是它保存了有关底层文件系统的数据,因此尝试 repostore 时可能会遇到一些困难这种备份在另一种 svn 服务器类型或另一台机器上。还有另一种类型的备份称为转储,这种备份不会将底层文件系统的任何信息保存到任何基于 tigiris.org 颠覆的 SVN 服务器中。

关于备份工具,您可以在命令提示符下使用 svnadmin 工具(它能够进行热复制和转储),此控制台位于 svn 服务器所在的同一目录中,或者您可以在 google 上搜索 svn 备份工具。

我的建议是你做这两种备份,然后把它们从办公室转移到你的电子邮件账户、亚马逊 s3 服务、ftp 或 azure 服务,这样你就可以有一个安全的备份,而不必在某个地方托管 svn 服务器你的办公室。

于 2011-05-01T06:04:14.857 回答
4

这是一个用于转储本地和远程颠覆存储库的 GUI Windows 工具:

https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html

工具说明说:

这个简单的工具允许对本地和远程 Subversion 存储库进行转储备份。该软件的工作方式与“svnadmin”相同,但不是它的 GUI 前端。而是直接使用 subversion 库来允许在独立模式下创建转储,而无需任何其他附加工具。

希望这有助于...

于 2014-05-28T21:06:17.707 回答
3

我喜欢将整个 repo 目录复制到我的备份位置。这样,如果发生了什么事,您只需将目录复制回来并准备好立即开始。

如果需要,请确保保留权限。通常,这只是 Linux 机器上的一个问题。

于 2008-08-28T18:46:23.093 回答
3

如果您使用的是 FSFS 存储库格式(默认),那么您可以复制存储库本身以进行备份。对于较旧的 BerkleyDB 系统,存储库不是独立于平台的,您通常希望使用 svnadmin dump。

用于备份的svnbook 文档主题推荐了该svnadmin hotcopy命令,因为它会处理文件使用等问题。

于 2008-08-28T18:55:26.533 回答
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 回答
2

对于每日和完整备份解决方案,只需在此处使用 SVN 备份脚本

于 2009-04-26T11:18:58.383 回答
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 回答
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 存储库一样使用本地存储库(在此示例中)!

这种方法的唯一问题是,本地存储库是由远程存储库中的实际修订版本增量创建的。正如有人写道:

svk miror 命令在刚刚创建的存储库中生成提交。因此,与远程公共存储库相比,后续同步创建的所有提交的修订号都会增加 1。

但是,这对我来说没问题,因为我只想要不时备份远程存储库,没有别的。

确认:

要进行验证,请使用带有本地存储库的 SVN 客户端,如下所示:

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

然后,此命令会从本地存储库中检出最新版本。最后它说Checked out revision N。这N比在远程存储库中找到的实际版本多一个(由于上述问题)。

为了验证 svk 是否也带来了所有历史记录,SVN 检出是使用 2、10、50 等的各种旧版本运行的-r。然后<local-dir-path-to-checkout-onto>确认其中的文件来自该版本。

最后,压缩目录C:/Documents and Settings\nverma/.svk/local/并将压缩文件存储在某处。定期这样做。

于 2011-05-29T14:13:56.097 回答
0

正如其他人所说,来自 Subversion 团队的 hot-backup.py 有一些不错的特性svnadmin hotcopy

我在一个 python 脚本上运行一个计划任务,该脚本在机器上搜索我所有的存储库,并使用 hotbackup 来保存几天的 hotcopies(腐败偏执)和svnadmin svndump远程机器上的一个。从那以后恢复真的很容易 - 到目前为止。

于 2008-09-01T07:02:54.440 回答
0

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 Dump 和 Gzip Dump 单线

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 颠覆备份和恢复

于 2014-11-26T16:34:29.537 回答