2012-04-04 36 views
1

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

问题是,集成到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

要使用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等工具。在服务器上自动合并通常被认为是不好的 - 合并应该在你提交之前由人类验证一点。制作修补程序后没有太多额外的工作。