【问题标题】:Can I use KDiff3 to process conflict markers? (Mercurial)我可以使用 KDiff3 来处理冲突标记吗? (水银)
【发布时间】:2016-03-17 21:33:28
【问题描述】:

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

解释:

我目前将 KDiff3 设置为 Mercurial 中的合并工具。我从终端会话运行我的合并(例如hg merge),当遇到冲突时,Mercurial 调用 KDiff3 进行 3 路合并,正如预期的那样。

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

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

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

【问题讨论】:

    标签: merge mercurial diff kdiff3


    【解决方案1】:

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

    首先,几乎所有的合并工具都需要两个或三个文件来执行合并。这就是这些工具的设计方式;直接处理带有冲突标记的文件的工具非常罕见。但是,这取决于您选择执行此操作的工具;如果您需要,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 将在调用合并工具之前生成本地、基础和其他修订;作为此过程的一部分,本地文件中的任何冲突标记都将被清除,因为该文件将被工作目录的第一个父目录的新副本替换。

    【讨论】:

    • 谢谢,@Reimer。我已经扫描了你的答案,稍后会深入检查。
    猜你喜欢
    • 2020-03-18
    • 2010-09-16
    • 2014-11-20
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    相关资源
    最近更新 更多