如何从现有的 svn 转储文件中删除空修订?

如何从现有的 svn 转储文件中删除空修订?

我有一个 svn 转储文件,其中包含“空”修订版(这些修订版是在仅同步现有存储库的子目录时由 svnsync 创建的)。

因为我想使用 svnsync 存储库作为新的主存储库(无需再次同步),所以我想摆脱所有空的修订。

不幸的是,通过 svndumpfilter 运行转储似乎并没有删除空修订版本,可能是因为 svndumpfilter 只查看它自己用 --exclude 选项清理的修订版本(另见这里

我也正在调查svndump工具,但它似乎不提供此功能。

是否有可能通过其他方式过滤这些修订?

答案1

这是我使用的命令行..它似乎运行得很好。

svnadmin dump <path_to_repo> | svndumpfilter2 <path_to_repo> [list of paths to keep] --renumber-revs --drop-empty-revs  |bzip2 --best > svn_dumpfile_full.bz

“要保留的路径列表”可以像 trunk 一样简单

但它确实要求您直接访问 svn 服务器。

答案2

好吧,我一直犹豫着要不要回答这个问题,因为这个解决方案并不适合胆小的人,而且可能会让你发疯。

尝试手动更改转储文件的内容,方法是从转储文件中删除空白的修订版本。您可能还会发现,您需要重新执行所有修订版本号序列,并仔细检查要复制的修订版本是否存在和/或将其指向正确的修订版本。

这是比较棘手的部分,编辑转储文件时要小心。一次额外的密钥失误可能会导致修订版加载失败,因为所有内容都经过了哈希校验。

祝你好运!

答案3

实际上我认为除了 --drop-empty-revs 之外,你还需要 svndumpfilter (或者是 svndumpfilter2) 中的 '-renumber-revs' 选项

相关内容