【问题标题】:Breaking the file connection in Mercurial after bad file split文件拆分错误后中断 Mercurial 中的文件连接
【发布时间】:2013-06-05 05:57:56
【问题描述】:

背景:

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

Base 被分支为Extended-branch。然后这个新分支对base.c进行了几处更改。

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

事实证明,在Extended 分支中向base.c 添加太多东西并不是一个好主意,因此将文件复制到ext.c。然后大部分 Extended 添加从 base.c 中删除,Base 功能从 ext.c 中删除。所以此时Extended中的base.cBase中的非常相似。

问题:

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

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

有没有办法告诉 Mercurial ext.c 不应再被视为与 base.c 相同?一种解决方案是将ext.c 替换为新文件,但随后历史记录将不复存在。

【问题讨论】:

  • 有趣的问题。我假设您使用hg copy 制作了副本?
  • 是的 hg copy 被使用。
  • 如果你 hg forget ext.c 然后 hg add 将它作为一个新文件,你可能会断开连接......但是你会丢失到目前为止的所有历史记录。但是,您可以添加 早期 版本的 ext.c(甚至可能在重命名之前),然后重播(移植)它从那时起的历史。
  • @alexis 这就是我最终所做的。您可能应该将其添加为答案,因为这个问题似乎偶尔会有一些活动。

标签: mercurial


【解决方案1】:

您可以断开与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 的“被遗忘”版本只是一个死胡同),因此传播更改应该没有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多