我不明白这个警告的原因:
WARNING 0x0000: Referencing data in revision 6882, which is older than the oldest dumped revision (r7001). Loading this dump into an empty repository will fail.
我正在尝试通过转储/加载循环将旧存储库迁移到新服务器。
我认为这是一个摆脱一些最旧修订版本的好机会,因此我使用了这个命令:
svnadmin dump -r7001:HEAD C:\svnrepo > C:\temp\repo.dmp
我期望转储将所有必要的“基本信息”收集到第一个转储修订版中。我该如何摆脱旧修订版?
答案1
svnadmin dump
只需将内容转储为 svn 可读格式,即可重新执行源存储库中的提交。无需“处理”即可让数据适合新存储库。
您的命令将“压缩”前 7000 个修订版本为 1 个,然后继续执行每个提交,就像在源存储库中所做的那样。
但是,在某个地方,您有一个复制操作,要求从修订版本 6882 获取文件(输出中的路径)。因此,如果您加载此转储,它会尝试访问修订版本 6882(不存在),并且会失败。这就是此警告的含义。
该怎么办?
您需要使用svndumpfilter
来破坏转储。这意味着您需要检查整个 svn 日志并检查它引用 7001 之前的修订版本中的文件的位置,并从转储中删除这些路径。如果您需要这些文件,那么使用传统工具就没那么幸运了,您可能需要尝试手动编辑转储文件。
答案2
您只是缺少一个参数。要进行增量备份,您应该使用该incremental
参数。
因此你的基本转储将是:
svnadmin C:\svnrepo dump -r0:7000 > C:\temp\repo1.dmp
当你需要更新时,你可以这样做:
svnadmin C:\svnrepo dump -r7001:HEAD --incremental > C:\temp\repo2.dmp
您可以使用以下方式恢复:
svnadmin load c:\newrepo < C:\temp\repo1.dmp
svnadmin load c:\newrepo < C:\temp\repo2.dmp
你只需要确定repo1.dmp
结束的地方就是开始的地方repo2.dmp
。
更多内容请参阅文档: http://svnbook.red-bean.com/en/1.6/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate
如果您想保留存储库的只读副本,也可以使用svnsync
。您不必记住上次修订是什么。但您需要准备好存储库以进行同步。