1

考虑一个具有两个中心分支/克隆的 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”,但它只是将三个版本吐出到标准输出。我错过了一些额外的配置吗?还是有更简单/更好的工具?

非常感谢

4

1 回答 1

1

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

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

到你的配置文件。如果需要,您可以设置优先级,请参阅wiki。您还可以找到更复杂使用方法diff3

但是,我测试了如何diff3通过编辑相邻行来处理您的场景,就像 Mercurial 一样,它也拒绝干净地合并它。不同的合并工具对于他们认为的“冲突”有不同的阈值,似乎 KDiff3 比 Mercurial 和diff3.

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

于 2012-04-12T16:07:29.137 回答