如何备份远程SVN存储库

我正在将我的SVN服务器从我的家庭服务器移动到我的远程服务器,所以我可以从其他位置更容易地访问它。 我的远程服务器没有备份,所以我想定期备份到我的家庭服务器。

远程服务器是Windows 2003服务器。 家庭服务器是Windows Home Server。

做这个的最好方式是什么? 我可以让我的家庭服务器每天晚上得到远程服务器的转储吗? 带宽不是一个巨大的考虑,但如果我可以只是复制到我的家庭服务器上的SVN服务器的任何新的签到,那就好了。

欢迎任何build议。

只需使用svnsync命令。

首先,在您的家用机器上创build一个新的存储库。

svnadmin create c:\backuprepo 

或者在Unix上:

 svnadmin create ./backuprepo 

接下来,创build一个名为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 

然后,初始化同步:

 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 

一天一次左右,你只会得到那些还没有在备份库中的变化。 第一次需要一段时间,但在将备份存储库与实际备份存储库同步后,只需几秒钟即可同步它,因为只有那些新的修订版本才需要同步。

从Subversion 1.7开始,你也可以使用新的命令svnrdump 。 从文档:

转储 – 也就是说,生成位于SOURCE_URL的存储库项目的修订版本库转储stream,将信息打印到标准输出。

用法是:

 svnrdump dump http://example.com/repos/ > repos.dump 

这将在repos.dump创build存储库的“转储文件”。 这是包含历史logging的存储库数据的完整备份,但不能直接被Subversion客户端读取。 如果您需要恢复这些数据,请使用标准的svnadmin工具:

 svnadmin create c:\backup-repos svnadmin load c:\backup-repose < repos.dump 

没有做任何testing,但这可能最终比svnsync慢。 svnrdump会每次都做一个完整的资源库转储,我假设synsync只会在上次运行时导入资源库中的更改。 您将拥有包含整个存储库的单个文件,这可能会也可能不会更容易pipe理。

请注意,您可能想通过gzip或类似的程序来pipe道svnrdump的输出,以可能显着减less输出文件的大小。

创build您的本地存储库

svnadmin create /Users/jsmith/repo

创build一个空的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

在文件系统级别上增量复制整个存储库的rsync (或者是位于其上的Windows UI的DeltaCopy )将是一个不错的select。

你也可以使用svnsync直接从一个SVN服务器复制新的修订版本到另一个。

您可以在转储存储库的远程服务器上使用脚本,然后将其复制到本地计算机(或将其保留在本地计算机的预定义位置进行复制)

您可以使用rsync或scp同步备份目录。

脚本可以使用“计划任务”运行,并可以生成唯一命名的备份文件,稍后将由本地计算机以上述方式同步。 (然后可能被删除)

EFraim在提到rsync的同时提到了这一点,

如果你不想使用它,Subversion图书提供了svnadmin dump --incremental选项,在这里解释:

  • 存储库维护 (向下滚动到“备份”部分)
  • 迁移存储库svnadmin dump --incremental上有示例

然而,要成功地完成这个任务,你必须要修改版本号 – rsync的原始版本库数据目录会更容易。

最难的部分可能是设置rsync,以便您的本地和远程机器可以安全地进行通信(即在2003服务器上设置SSH服务)。 Wim提到的DeltaCopy非常有趣,将是我的第一枪; 仅用于命令行操作,下面是如何在Windows 2003上将Rsync作为服务运行的一种方法

我会使用svnsyncsvnadmin hotcopy因为这两种技术都保证从存储库复制有效的数据,即使事务正在进行。 其他文件同步技术可能不如可靠,这取决于存储库格式。

在Mac OS X 10.10中, svnrdump命令位于:

  • /Library/Developer/CommandLineTools/usr/bin/svnrdump

然后你可以使用joesdiner的上面的答案。