移至 Mercurial 时,SVN“缺少修订”

Posted

技术标签:

【中文标题】移至 Mercurial 时,SVN“缺少修订”【英文标题】:SVN "missing revision" when moving to Mercurial 【发布时间】:2011-05-19 15:34:34 【问题描述】:

我们正在尝试从 Subversion 迁移到 Mercurial,但遇到了障碍。 “svnadmin verify”产生这个错误:

svnadmin: 没有这样的修订 21228

查看服务器,“revs”目录中没有 21228 的文件。其他一切都完好无损,当前的磁头工作正常(我们现在处于修订版 63000 左右)。

我们并不真正关心此修订,但我们真的不想在转换时丢失 1-21227 的历史记录。有谁知道强制 SVN 忽略此错误或以某种方式恢复丢失的文件的方法?

【问题讨论】:

【参考方案1】:

我在一次 svn -> hg 转换中经历了类似的事情。如果您不担心该修订版中的内容,您可以分三个步骤进行转换:

1) 使用svnadmin dump 两次转储 SVN 存储库,跳过错误的修订版

svnadmin dump -r1:21227 /var/svn/repo/foo > foo-svn-1.dump

svnadmin dump -r21229:X /var/svn/repo/foo > foo-svn-2.dump

并将它们重新加载到新的临时 SVN 存储库中。

svnadmin create ./foo-svn-1
svnadmin load ./foo-svn-1 ./foo-svn-1.dump

svnadmin create ./foo-svn-2
svnadmin load ./foo-svn-2 ./foo-svn-2.dump

2) 使用hg convert将两个临时存储库转换为两个hg存储库

hg convert ./foo-svn-1 foo-hg-1

hg convert ./foo-svn-2 foo-hg-2

并将第二个存储库中的所有变更集拉入第一个存储库(使用hg pull -f 强制导入不相关的变更集)。

cd ./foo-hg-1
hg pull -f ../foo-hg-2

然后,您将拥有一个在您拆分 svn 存储库的修订历史记录中中断的存储库。

3) 将两棵树与hg rebase 扩展拼接在一起,如Splicing over discontinuities in Mercurial repository timeline 中所述

【讨论】:

辛苦了!我必须做的几件事:(1)我不能在第二个“svnadmin dump”中使用“--incremental”。 (2) 我不得不在“hg pull”中使用“--force”选项。

以上是关于移至 Mercurial 时,SVN“缺少修订”的主要内容,如果未能解决你的问题,请参考以下文章

如何为Mercurial最佳地配置中央存储库/多个中央存储库?

处理重命名:svn vs. git vs. mercurial

Windows上的自定义Mercurial

Mercurial 都有哪些可用的 GUI 客户端?

用于Snow Leopard上的mercurial的GUI

Git 与 Mercurial 存储库的互操作性