【问题标题】:Mercurial merge - auto merging certain conflict patternsMercurial 合并 - 自动合并某些冲突模式
【发布时间】:2026-01-20 11:00:02
【问题描述】:

我们将 Maven pom.xml 文件从一个存储库合并到另一个存储库。

pom.xml 文件以这种形式列出了一个版本:

<version>5.0.17-SNAPSHOT</version>

如果我们在这一行有冲突,我们总是希望使用本地文件的冲突版本。有没有办法自动获取更改的本地文件版本?

对于任何其他冲突,我们希望继续使用标准的手动合并流程。

【问题讨论】:

    标签: mercurial merge pom.xml


    【解决方案1】:

    当然。查看Merge Tool Configuration wiki 页面,您会发现应该这样做:

     [merge-patterns]
     pom.xml = internal:local
    

    【讨论】:

    • 对。但这适用于整个 pom.xml 文件。我们只想将其应用于 pom.xml 文件中的一种冲突 - &lt;version&gt;x.x.x&lt;/version&gt;
    • 啊,我把“对于任何其他冲突”读作“对于任何其他冲突的文件”
    • 你可以很容易地编写一个 merge-pom.sh 脚本,其逻辑如下:如果 only 冲突是 &lt;version&gt; 行,则使用 internal:local,否则启动手动合并工具。当唯一的更改是版本时,这将使您不会在常见情况下看到合并工具。通过更多的工作,您可以让您的脚本通过并在行是 &lt;version&gt; 时逐行“选择本地”,然后然后在已经部分合并的行上启动合并,但你是这种复杂程度可能会导致收益递减。
    • 我喜欢脚本使用 internal:local 的想法,其中唯一的冲突是 。你有任何示例代码可以做到这一点吗?或者链接到可以帮助我们编写这样一个脚本的文档?
    • 有没有办法从自定义脚本中找出如何调用另一个内置合并工具或默认工具?我不确定他们会在哪里找到。或者是否可以在脚本中使用hg mergeresolve 本身来执行此操作。似乎只修改merge3的源代码以在比赛中表现不同似乎更简单。