恢复并替换损坏的Subversion修订版

时间:2016-02-04 14:09:42

标签: svn

假设您有一个Subversion存储库,其中svnadmin verify /path/to/repo由于错误而在版本42处中止(并且存储库包含更多版本)。

Subversion manuals然后建议:

  

[..]这意味着您的存储库至少有一个损坏的修订版,您应该从备份中恢复损坏的修订版

好的,很好 - 但该怎么做呢?

svnadmin load是否适合该工作?例如

之类的东西
svnadmin load -r 42 /path/to/some/old.dump

svnadmin load是否会覆盖损坏的修订版42并将其他所有内容单独保留?

或者我是否必须从基于文件的备份恢复该修订版?然后,如何识别与版本42相关的所有子目录和文件?

1 个答案:

答案 0 :(得分:1)

我假设您的备份是转储文件。在这种情况下,使用

创建一个新的存储库
svnadmin create /path/to/newrepo

使用

将最新鲜的备份加载到其中
svnadmin load /path/to/newrepo < backup.dump

这将使新备份文件中包含备份中包含的所有修订。

现在,您需要将新版本从当前存储库传输到新存储库。为此,您需要从当前存储库中转储出较新的版本,并将它们加载到新的存储库中。

为了使示例更容易理解,我们假设您当前的存储库位于版本1500,而您的备份仅包含1250个版本。因此,您需要从当前存储库转储版本1251到1500并将其加载到新存储库中。为此,您需要运行

svnadmin dump /path/to/currentrepo -r 1251:1500 --incremental > additionalrevs.dump
svnadmin load /path/to/newrepo < additionalrevs.dump

- 增加标志是必不可少的

现在,如果您的备份是包含服务器端存储库文件的基于文件的备份,您可能可以使用其他技巧。制作当前存储库的副本,因为我们将更改其中的文件,并且可能会出错。在备份中查找文件/path/to/repo/maindir/db/revs/0/42,然后将其复制并替换为副本存储库中的同一文件。使用文件/path/to/repo/maindir/db/revprops/0/42进行相同的替换。执行此操作后,请验证存储库的新副本,并且可能会解决问题。