如何备份远程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作为服务运行的一种方法 。
我会使用svnsync
或svnadmin hotcopy
因为这两种技术都保证从存储库复制有效的数据,即使事务正在进行。 其他文件同步技术可能不如可靠,这取决于存储库格式。
在Mac OS X 10.10中, svnrdump
命令位于:
-
/Library/Developer/CommandLineTools/usr/bin/svnrdump
然后你可以使用joesdiner的上面的答案。