我不完全确定你到底想做什么;我是猜的,如果我错了,请纠正我。
首先,几乎所有的合并工具都需要两个或三个文件来执行合并。这就是这些工具的设计方式;直接处理带有冲突标记的文件的工具非常罕见。但是,这取决于您选择执行此操作的工具;如果您需要,Mercurial 和 kdiff3 无法帮助您:您需要一个不同的工具。
其次,让我们深入了解一下合并工具是如何配置的。您可以查看hg help mergetools 以获取可用合并工具的列表以及如何选择一个,并查看hg help config.merge-tools(注意破折号)以获取所需的配置参数。您可以通过以下方式查看 kdiff3 设置:
hg config merge-tools | grep -w kdiff3
默认情况下,不应设置merge-tools.kdiff3.premerge,因此hg merge 将首先尝试使用其内部合并算法来解决冲突,并且只回退到 kdiff3(假设您已将其选为合并工具)没有冲突就无法解决。 kdiff3 是如何被调用的可以通过以下方式看到:
hg config merge-tools.kdiff3.args
这里的默认值应该已经非常接近你想要的了。我现在假设您不希望 kdiff3 默认启动,而是希望控制何时调用 kdiff3。
如果您不想在存在冲突的情况下默认转储到合并工具中,那么您可以做的是首先与其中一个合并内部工具:merge、:merge3 或:fail。 :merge 或 :merge3 将在无法在内部合并的文件中放置冲突标记,并将可以合并的文件标记为已解决,其余的标记为未解决。 :fail 合并工具会将所有双方都更改的文件标记为未解决,即使冲突可以得到解决(并且不会添加冲突标记)。这可以通过例如:
hg merge --tool :merge
此时,您将遇到一些 Mercurial 的内部合并工具能够解决的冲突和一些无法解决的冲突(检查 hg resolve -l 以查看其状态或 hg resolve -l -T '{ifeq(status,"U","{path}\n","")}' 仅列出未解决的文件)。
然后您可以调用hg resolve --tool kdiff3 FILE(如果kdiff3 是您的默认合并工具,也可以省略--tool kdiff3 选项)来解决FILE 中的任何冲突。 Mercurial 将在调用合并工具之前生成本地、基础和其他修订;作为此过程的一部分,本地文件中的任何冲突标记都将被清除,因为该文件将被工作目录的第一个父目录的新副本替换。