考虑一个带有两个中心分支/克隆的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。我错过了一些额外的配置吗?或者是否有更简单/更好的工具?
非常感谢
答案 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这样的工具。服务器上的自动合并通常被认为是错误的 - 在提交之前,应该由人员稍微验证合并。制作此修补程序后,这并没有多少额外的工作。