hg自动与diff3合并

时间:2012-04-04 15:18:12

标签: mercurial merge diff3

考虑一个带有两个中心分支/克隆的Hg项目 - 例如DEV和PRD。当有人将修补程序推送到PRD时,中央服务器上的自动脚本会转到DEV并提取新的更改。然后它尝试将修补程序合并到DEV。

问题是集成到Hg中的合并工具很糟糕 - 只要对同一文件进行并行更改就会失败。请看以下示例:

parent:3,7c
 four
 five
 six

 seven

child1:3,7c
 four
 five5
 six6

 seven7

child2:3,7c
 fourmore
 five
 six
 more
 seven

如您所见,这里没有实际的冲突。如果我们在本地使用kdiff进行合并,它可以在没有用户输入的情况下解决这个简单的情况!

我想让中央服务器管理这些案例。我想过在静默模式下使用kdiff3,但是我无法在它上面安装kdiff3(它是一个我们甚至没有管理员访问权限的CLI系统),但也许有一种方法可以将diff3插入到hg merge中,这样它就可以了可以解决这样的简单案例吗?我尝试在hgrc中设置“[ui] / n merge = diff3”,但它只是将三个版本吐出到stdout。我错过了一些额外的配置吗?或者是否有更简单/更好的工具?

非常感谢

1 个答案:

答案 0 :(得分:1)

要使用diff3作为合并工具,您需要添加

[merge-tools]
diff3.args = $local $base $other -m > $output

到你的配置文件。您可以根据需要设置优先级,请参阅the wiki。您还会发现更复杂的recipes for using diff3 there

但是,我测试了diff3如何通过相邻行的编辑处理你的场景,就像Mercurial一样,它也拒绝合并这个。不同的合并工具对于他们认为的“冲突”有不同的阈值,看起来KDiff3比Mercurial和diff3更宽容。

我建议你让PRD上制作此修补程序的开发人员负责将其合并到DEV本地,在那里他可以访问像KDiff3这样的工具。服务器上的自动合并通常被认为是错误的 - 在提交之前,应该由人员稍微验证合并。制作此修补程序后,这并没有多少额外的工作。

相关问题