错误的文件拆分后,在Mercurial中断开文件连接

时间:2013-06-05 05:57:56

标签: mercurial

背景

首先有一个文件base.c,该文件位于只有一个分支Base的存储库中。

Base分支为Extended - 分支。然后,这个新分支对base.c进行了一些更改。

如果base.c中的文件Base中修复了错误,则会将其合并到Extended

事实证明,向base.c分支中的Extended添加太多内容并不是一个好主意,因此将文件复制到ext.c。然后,大多数Extended个添加内容都会从base.c中删除,Base来自ext.c。因此,此时base.c中的ExtendedBase中的ext.c非常相似。

问题:

当文件被拆分时,Mercurial被告知base.cBase的副本,因为他们共享共同的历史记录。不幸的是,这不是一个好主意。

现在,如果错误在Extended分支上修复并合并到base.c,Mercurial认为这些更改应适用于ext.cext.c,即使后者不再与前者有任何相似之处。这使得合并非常烦人。

有没有办法告诉Mercurial base.c不再被认为与ext.c相同?一种解决方案是用新文件替换{{1}},但随后不会跟踪历史记录。

1 个答案:

答案 0 :(得分:2)

您可以断开与hg forget ext.c的连接,然后将hg add ext.c作为新文件。但是如果你使用ext.c的最新修订版进行此操作,那么到目前为止你将丢失所有历史记录。

您可以做的是添加ext.c的早期版本,甚至可能在重命名之前添加,并重播(移植)其历史。您可以将ext.c的历史记录添加为过去修订的分支,并将其合并到提示中:

---o---o---o---(tip)--(merge)
    \                /
     e---e---e ...  e

或者也许没关系,您只需将ext.c的历史记录添加到当前tip

---o---o---o---(tip)--e--e--e--e

这些方法都不涉及任何历史重写(ext.c的“遗忘”版本只是一个死胡同),所以传播更改应该没有问题。