如何备份远程SVN存储库

Roa*_*ers 47 svn backup

我目前正将SVN服务器从家用服务器移动到远程服务器,以便我可以更轻松地从其他位置访问它.我的远程服务器没有备份,所以我想定期备份到我的家庭服务器.

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

做这个的最好方式是什么?我可以让我的家庭服务器每晚都能获得远程服务器的转储吗?带宽不是一个重要的考虑因素,但如果我可以将任何新的签到复制到我的家庭服务器上的SVN服务器那么没问题.

欢迎任何建议.

Ste*_*fan 116

只需使用svnsync命令即可.

首先,在家用机器上创建一个新的存储库.

svnadmin create c:\backuprepo
Run Code Online (Sandbox Code Playgroud)

或者在Unix上:

svnadmin create ./backuprepo
Run Code Online (Sandbox Code Playgroud)

接下来,创建一个名为pre-revprop-change.bat的文件:

echo exit 0 > c:\backuprepo\hooks\pre-revprop-change.bat
Run Code Online (Sandbox Code Playgroud)

或者在Unix上:

echo -ne '#!/bin/sh\nexit 0' > ./backuprepo/hooks/pre-revprop-change
chmod ugo+x ./backuprepo/hooks/pre-revprop-change 
Run Code Online (Sandbox Code Playgroud)

然后,初始化同步:

svnsync init file:///c:/backuprepo https://url/of/your/repository
Run Code Online (Sandbox Code Playgroud)

或者在Unix上:

svnsync init file:///Volumes/volumelabel/backuprepo https://url/of/your/repository
Run Code Online (Sandbox Code Playgroud)

在那之后,你可以简单地运行

svnsync sync file:///c:/backuprepo
Run Code Online (Sandbox Code Playgroud)

每天一次左右,您将只获得备份存储库中尚未存在的更改.第一次需要一段时间,但是在您将备份存储库与真实存储库同步之后,只需几秒钟就可以同步它,因为只需要同步那些新版本的修订版本.

  • 如果你在像UNIX这样的服务器上运行,不要忘记给你的钩子执行权限或它被认为是失败的:`chmod a + x pre-revprop-change` (7认同)
  • 在UNIX之类的服务器上,不要忘记将`#!/ bin/sh`添加到`pre-revprop-change`的顶部. (6认同)
  • 如果可以的话,我会两次投票.与此处发布的其他答案不同,这个答案实际上是正确的.rsync:不确定以一致的状态捕获存储库.bdb存储库跨平台不是二进制兼容的.svnadmin转储需要访问服务器. (4认同)

joe*_*ner 19

从Subversion 1.7开始,您也可以使用new命令svnrdump.来自文档:

转储 - 也就是说,生成位于SOURCE_URL的存储库项目的存储库转储流,将信息打印到标准输出.

用法是:

svnrdump dump http://example.com/repos/ > repos.dump
Run Code Online (Sandbox Code Playgroud)

这将创建存储库的"转储文件" repos.dump.这是包含历史记录的存储库数据的完整备份,但不能由subversion客户端直接读取.如果需要还原此数据,请使用标准svnadmin工具:

svnadmin create c:\backup-repos
svnadmin load c:\backup-repose < repos.dump
Run Code Online (Sandbox Code Playgroud)

没有做过任何测试,但这可能最终会慢于svnsync.svnrdump每次都会对存储库进行完全转储,我假设synsync自上次运行以来只会导入存储库中的更改.您将拥有一个包含整个存储库的文件,这可能会也可能不会更容易管理.

请注意,您可能希望管理svnrdump通过gzip或类似程序的输出,以可能显着减小输出文件的大小.


yan*_*kwa 11

创建本地存储库

svnadmin create /Users/jsmith/repo

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


Wim*_*Wim 7

rsync(或DeltaCopy,它是一个Windows UI)将是在文件系统级别逐步复制完整存储库的不错选择.

您还可以使用svnsync将新修订版直接从一个SVN服务器复制到另一个SVN服务器.

  • 但是,使用rsync的问题是,如果您在某人进行更改时复制存储库,则副本可能会损坏.svnsync比仅复制存储库更安全. (2认同)