这个 svnadmin 转储警告是什么意思:“引用 rX 中的数据,其比最早转储的修订版 rY 更旧”?

这个 svnadmin 转储警告是什么意思:“引用 rX 中的数据,其比最早转储的修订版 rY 更旧”?

我不明白这个警告的原因:

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。您不必记住上次修订是什么。但您需要准备好存储库以进行同步。

相关内容