【问题标题】:Mercurial merge strategy per file type每种文件类型的 Mercurial 合并策略
【发布时间】:2011-02-10 21:17:44
【问题描述】:

全部:

我想使用 kdiff 来合并所有带有特定后缀(比如 *.c、*.h)的文件,并且我想对所有带有另一个后缀的文件做两件事(关闭 premerge 并使用 internal:other)(说 *.mdl)。这样做的目的是允许我为特定文件类型使用一种“clobber 合并”类型(即:不可合并的文件,如配置、自动生成的 C、模型等)

在我尝试过的 .hgrc 中:

[merge-tools]
kdiff3=
clobbermerge=internal:other
clobbermerge.premerge = False

[merge-patterns]
**.c = kdiff3
**.h = kdiff3
**.mdl = clobbermerge

但它仍然会为所有文件触发 kdiff3。想法?

对此的扩展是在目录上执行“clobber 合并” - 但是一旦文件后缀的语法清晰,目录应该很容易。

【问题讨论】:

    标签: mercurial merge


    【解决方案1】:

    合并工具可以使用任何可执行文件。要设置一个始终用$other 覆盖$base 的合并工具,您可以使用以下命令:

    [merge-tools]
    clobbermerge.priority = 100
    clobbermerge.premerge = False
    clobbermerge.args = $other $output
    clobbermerge.executable = <copy executable>
    

    在 Windows 上使用此策略时,存在一个问题。您不能简单地将&lt;copy executable&gt; 替换为copy shell 命令。出于某种原因,Mercurial 无法在此上下文中找到 shell 命令。我没有在 *nix 上试过这个。

    要解决此问题,您可以创建一个分发批处理文件来执行复制。它只需要运行:copy %1 %2。一旦放置在您的 PATH 中,您就可以设置 clobbermerge.executable=clobber.bat

    如果您安装了 kdiff3(在 Windows 上随 TortoiseHg 一起提供),您可以在没有外部批处理文件的情况下使用如下配置获得相同的结果:

    [merge-tools]
    clobbermerge.priority = 100
    clobbermerge.premerge = False
    clobbermerge.args = --auto $base $other $other -o $output
    clobbermerge.executable = kdiff3
    

    此配置的关键是args 字段:

    • --auto: 告诉 kdiff3 如果没有冲突就不要打开 GUI
    • $base $other $other:告诉 kdiff3 只使用 $other
    • $output: 告诉 kdiff3 输出文件的名称

    【讨论】:

      【解决方案2】:

      根据这个Mercurial MergeToolConfiguration page,你应该把interal:other直接放在匹配模式之后:

      [merge-patterns]
      **.mdl = internal:other
      

      【讨论】:

      • 这个问题的关键部分是我需要关闭 .mdl 文件的预合并以及应用 internal:other 合并策略。
      • 如果你使用internal:other,我想什么都不会被合并并且使用other文件? internal:other 只能在文件模式之后直接使用,所以你可能需要添加一个 premerge 钩子? humbug.in/docs/hgbook/ch10s08.html#sec:hook:preupdate
      猜你喜欢
      • 2018-09-08
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      相关资源
      最近更新 更多