我不完全确定您到底想做什么;我猜的,如果我错了,请纠正我。
首先,几乎所有合并工具都需要两个或三个文件来执行合并。这就是这些工具的设计方式;直接处理带有冲突标记的文件的工具非常罕见。但是,这取决于您选择执行此操作的工具;如果您需要,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
(--tool kdiff3
如果 kdiff3 是您的默认合并工具,也可以省略该选项)来解决FILE
. Mercurial 将在调用合并工具之前生成本地、基础和其他修订;作为此过程的一部分,本地文件中的任何冲突标记都将被清除,因为该文件将被工作目录的第一个父目录的新副本替换。