移动到Mercurial时SVN“缺少修订版”

时间:2011-05-19 15:34:35

标签: svn mercurial

我们正试图从Subversion迁移到Mercurial,我们遇到了障碍。 “svnadmin verify”产生此错误:

  

svnadmin:没有这样的修订版21228

在服务器上查看,21228的“revs”目录中没有文件。其他所有内容都完好无损且当前头部工作正常(我们现在正在修订63000左右)。

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

1 个答案:

答案 0 :(得分:3)

我在我的一个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)如Splicing over discontinuities in Mercurial repository timeline

中所述,将两棵树与hg rebase扩展名拼接在一起