假设您有一个Subversion存储库,其中svnadmin verify /path/to/repo
由于错误而在版本42处中止(并且存储库包含更多版本)。
Subversion manuals然后建议:
[..]这意味着您的存储库至少有一个损坏的修订版,您应该从备份中恢复损坏的修订版
好的,很好 - 但该怎么做呢?
svnadmin load
是否适合该工作?例如
svnadmin load -r 42 /path/to/some/old.dump
svnadmin load
是否会覆盖损坏的修订版42并将其他所有内容单独保留?
或者我是否必须从基于文件的备份恢复该修订版?然后,如何识别与版本42相关的所有子目录和文件?
答案 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
进行相同的替换。执行此操作后,请验证存储库的新副本,并且可能会解决问题。