转换mercurial存储库时,避免shamap损坏的正确方法是什么?

时间:2010-09-14 22:00:42

标签: mercurial

我正在尝试从较大的存储库构建一个已修剪的Mercurial存储库,并且需要从多个分支中提取更改。我想使用hg convert,但我收到错误,如

  

abort:未知版本'81b79760e1350d185dbf645ab67633eda9d52ada'!

尝试使用convert从相关分支获取更改时。这就是我做的。我开始使用 mybranch 并使用

  

hg convert --filemap filemap mybranch mybranch_converted

然后,为了从 anotherbranch (与 mybranch共享一个共同的祖先)捕获配对的下转换存储库的任何更改,我调用了

  

hg convert --filemap filemap anotherbranch mybranch_converted

但是因为我上面展示的中止错误而失败了。

我明白这表明第一次转换创建的 shamap 文件以某种方式被borked,所以我该怎么做才能生成一个好的 shamap 文件?考虑到它是如此直接,我也有兴趣知道什么可能导致这个过程失败。此外,由于这可能是相关的,我应该注意 mybranch anotherbranch 的祖先本身是通过转换另一个Mercurial存储库生成的。

1 个答案:

答案 0 :(得分:2)

我认为该消息告诉您,您所引入的其中一个更改集中有一个父节点,其节点ID未显示在目标存储库中 - 并且它不会显示,因为您的初始转换已更改了nodeids。

你应该做两次拉动和一次转换,而不是做两次转换:

hg init both_unconverted
hg -R both_unconverted pull ../mybranch
hg -R both_unconverted pull ../anotherbranch
hg convert --filemap myfilemap both_unconverted both_converted

这样你就不会试图将新分支移植到已经修改过的变更集上。

你可以通过--splicemap获得你的路线,但我不确定,上面的建议更简单地做同样的事情。