2014-12-04 47 views
5

我正在做一个合并的过程中,我已经准备好在这一点上提交,但我的提交对话框在TortoiseHg显示许多文件被修改,但是当我比较父母说它说所有的文件都是二进制文件。Mercurial合并结果的文件标记为已修改,但二进制相等

  • 我没有,也没有启用eol extension
  • 恢复没有改变,文件仍然注册为已修改。
  • hg父母显示两个父母的文件。
  • hg stat显示文件被修改,例如,

    c:\Projects\MyProject>hg stat Authorization\AuthorityGroups.cs 
    M Authorization\AuthorityGroups.cs 
    
  • hg diff --git什么也没有显示,例如,

    c:\Projects\MyProject>hg diff --git Authorization\AuthorityGroups.cs 
    c:\Projects\MyProject> 
    

我在两个不同的克隆尝试这种在两台不同的机器,我看到了同样的事情。

有关我如何诊断或修复此问题的其他想法? 显然有些事情已经改变,但如果它不显示在HG比较 - git我怎么能建立可能是什么?

更新2014年12月10日:

我已经做更多的检查对两个父修订的历史,我想我明白为什么它感到困惑。

  • 我们已经在默认版本1中添加了原始父文件。
  • 在Apple分支上,该文件已重命名以将其移至新位置。
  • 在橙色分支上添加了文件,将其移动到同一个新位置。

因此,对两个分支是二进制文件相同,并且在同一地点,但据推测水银下垂它作为一个差异将被合并,因为他们到达那里的明显不同的手段。

所以,问题就变成了:

是否有被视为添加和删除长提交变更(任何方式回顾性修复移动新提交就可以了,但我不能编辑历史),还是我只需要让它通过合并?

+0

我认为你已经这样做了,但如果不是,分别对每个父母进行差异化处理,因为它可能与第一个父母相等,但与第二个母亲不同。 (只需右键单击第二个父级,然后执行“diff to local”) – Edward 2014-12-05 15:19:55

+0

不幸的是,它绝对报告的二进制文件与父母双方相同,但我刚刚根据您的建议和示例对其中一个示例的每个父母进行了单独的比较两者都没有返回,所以文件确实看起来是相同的,就gg diff --git而言。 – Nanhydrin 2014-12-05 16:43:25

+0

你能发布hg stat的结果吗? – bbaja42 2014-12-07 23:28:21

回答

1

有什么办法来修复追溯此举被视为添加和删除长提交变更(新提交就可以了,但我不能编辑历史)

那么......有点。更新到最近的Orange提交中,这些文件具有旧名称(如果您不确定它的具体发生时间,可以使用hg bisect查找它),对新名称执行hg rename,然后将其合并到目前橙色的头。Mercurial 应该足够聪明,可以将文件注册为正确重命名,并且不会引起冲突(我们知道这是因为更复杂的Apple/Orange合并)。

还是我只需要让它通过合并?

这很容易。 Mercurial的合并算法非常聪明。它可以处理这种情况就好了。

除非您有第三个分支,其中文件从未移动过,否则第二个选项不会导致问题。如果你有这样一个分支,只要你将它合并到苹果重命名的后裔(或合并这样的后裔),你应该没问题。合并或来自Orange分公司主要困难。

+0

这是合理的,作为一种可能的策略。我只是让合并经历了最后,当然一切都很好。我还有一些工作要做,我可能会尝试。这种策略的缺点当然是我必须手动重做重命名,并且可以有相当数量的重命名,所以懒惰成为最终决定因素! – Nanhydrin 2015-07-24 23:06:55

相关问题