如何备份SVN代码库?

23

我经常听到拥有SVN仓库并不意味着取消备份的必要性。

那么如何进行这样的备份呢?我的意思是,仓库会随着时间的推移而膨胀,对吗?所以我是每次将其全部备份还是怎么做?

进行这样的备份最简单的方法是什么?

5个回答

24

hotcopy 命令后面可以跟着压缩命令吗?例如 svnadmin hotcopy -q repopath | bzip2 -9 > repo_backup.bz2 - Sandburg
它应该能够做到,只需将结果导入您的zip命令即可... - Kevin LaBranche

24

你可以使用svnadmin dump。例如,在Linux中创建一个压缩备份文件的命令如下:

svnadmin dump -q /path/to/repo | bzip2 -9 > repo_backup.bz2

使用svnadmin load来恢复备份:

svnadmin create /path/to/newrepo
bzip2 -cd repo_backup.bz2 | svnadmin load /path/to/newrepo

请参阅 SVN 书中的 使用 svnadmin 进行仓库数据迁移


3
我使用post commit hook实现了增量备份:
REM 备份版本 MD "C:\SVN Backup\Incremental\%TYPE%" set TYPE=2020 set ADMIN="C:\Program Files (x86)\WANdisco\uberSVN\bin\svnadmin.exe" set ZIP="C:\Program Files\7-Zip\7z.exe" %ADMIN% dump %REPOS% -r %REV% --incremental | %ZIP% a -si "C:\SVN Backup\Incremental\%TYPE%\%2.7z" -mmt -mx9
除了增量备份,我还有一个每周运行的批处理文件来进行完全备份。虽然这样做会有些多余,但是所有备份文件都使用7 Zip命令行实用程序压缩。然后将其同步到我们通常的备份介质中。
编辑-使用7 Zip命令行实用程序更新了代码以压缩转储文件以节省空间。

1

只需复制并压缩整个存储库文件夹,这将使您轻松地返回不同的时间点。当然,在存储库正在使用时,您必须确保不要这样做,否则神知道会发生什么 :)

在Windows上,您可以使用VSS来确保进行一致的备份,或者在晚上备份时不使用它。

或者,查看这个类似的问题那篇博客文章


3
这提出了另一个问题=>手动复制代码库和使用svnadmin dump -q /path/to/repo | bzip2 -9 > filename.bz2有什么区别?哪个选项更好?我认为两者都可以,我已经测试过了! - Thunder
我认为dump/hotcopy可以安全地处理其他进程对存储库的潜在并发访问。 - molecular

1

我每周只需将代码库压缩一次,然后将压缩文件复制到另一个存储位置。


你如何确保在此期间没有人提交代码? - Martin Thompson
这仅适用于没有其他提交的情况(例如,只有一个开发人员)。对于大多数人来说,这不是一个可行的解决方案。 - codewario
2
是的,这是只有一个开发人员的情况。我想在有更多开发人员的情况下,可以配置SVN工具以暂时拒绝提交,并显示像“服务器正在备份,请10分钟后再试。”这样的消息,但我不确定它当前是否支持该功能。 - Rafael Anschau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接