gpt4 book ai didi

Mercurial 每种文件类型的 merge 策略

转载 作者:行者123 更新时间:2023-12-02 22:18:21 26 4
gpt4 key购买 nike

全部:

我想使用 kdiff merge 具有特定后缀(例如 *.c、*.h)的所有文件,并且我想对具有另一个后缀的所有文件做两件事(关闭预 merge 并使用内部:其他)(说*.mdl)。这样做的目的是允许我对特定文件类型使用一种“破坏 merge ”(即:不可 merge 的文件,如配置、自动生成的 C、模型等)

在我的 .hgrc 中我尝试过:

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

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

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

此方法的一个扩展是在目录上执行“破坏 merge ” - 但是一旦文件后缀的语法清晰,目录就应该很容易。

最佳答案

merge 工具可以使用任何可执行文件。设置始终覆盖 $base 的 merge 工具与 $other ,您可以使用以下内容:

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

在 Windows 上使用此策略时,存在一个问题。您不能简单地替换 <copy executable>copy外壳命令。由于某种原因,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 输出文件的名称

关于Mercurial 每种文件类型的 merge 策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4962810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com