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

use*_*733 6 mercurial

背景:

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

Base分支制作Extended- 分支.然后,这个新的分支进行了几处更改base.c.

如果在文件base.c中修复了错误Base,它们将合并到Extended.

事实证明,base.cExtended分支中添加太多东西不是一个好主意,因此文件被复制到ext.c.然后,大多数Extended添加内容将从中删除base.c,并Base从中删除功能ext.c.所以在这一点base.cExtended是非常相似Base.

问题:

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

现在,如果错误是固定的Base分支和合并Extended,水银认为,这些变化应同时适用于base.cext.c,即使后者是不再有任何相似之处,前者.这使得合并非常烦人.

有没有办法告诉Mercurial ext.c应该不再被视为相同base.c?一种解决方案是ext.c用新文件替换,但历史不会跟随.

ale*_*xis 2

您可以使用 , 断开连接hg forget ext.c,然后hg add ext.c作为一个新文件。但如果您使用 的尖端修订版执行此操作ext.c,您将丢失到目前为止的所有历史记录。

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

---o---o---o---(tip)--(merge)
    \                /
     e---e---e ...  e
Run Code Online (Sandbox Code Playgroud)

或者也许这并不重要,您可以将历史记录添加ext.c到当前tip

---o---o---o---(tip)--e--e--e--e
Run Code Online (Sandbox Code Playgroud)

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