KDiff3 可以解释标准的差异冲突标记吗?

解释:

我目前在 Mercurial 中设置了 KDiff3 作为我的合并工具。我从终端 session 运行我的合并(例如 hg merge ),当遇到冲突时,Mercurial 会按预期调用 KDiff3 进行 3 向合并。

我想做的是首先使用 Mercurial 的内部 merge3 算法并将冲突标记留在文件中——然后随意解析单个文件(而不是尝试一次完成所有合并)。

我想将合并工具传递给解析命令(例如 hg resolve --tool kdiff3 file.txt ),但看起来 KDiff3 不处理冲突标记,而是希望将三个文件作为命令行参数提供。

有没有办法做我想做的事?我宁愿在 GUI 中查看差异,也不愿手动围绕冲突标记进行编辑。

最佳答案

我不完全确定你到底想做什么;我猜的,所以如果我错了,请纠正我。

首先,几乎所有合并工具都需要两个或三个文件来执行合并。这就是这些工具的设计方式;直接处理带有冲突标记的文件的工具非常少见。但是,这取决于您选择执行此操作的工具;如果这是您的需要,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","")}' 仅列出 Unresolved 文件)。

然后您可以调用 hg resolve --tool kdiff3 FILE (如果 kdiff3 是您的默认合并工具,也可以省略 --tool kdiff3 选项)来解决 FILE 中的任何冲突。 Mercurial 将在调用合并工具之前生成本地、基础和其他修订;作为此过程的一部分,本地文件中的任何冲突标记都将被清除,因为该文件将被替换为工作目录的第一个父目录的新副本。

关于merge - 我可以使用 KDiff3 来处理冲突标记吗? ( Mercurial ),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34232549/

10-13 07:18
查看更多