【问题标题】:How to set difftool/mergetool for a specific file extension in Git?如何为 Git 中的特定文件扩展名设置 difftool/mergetool?
【发布时间】:2012-09-10 17:48:42
【问题描述】:

是否可以在 Git 中设置自定义工具来合并具有特定扩展名的文件?

感谢您的指点!

更新

我想不出比定义自定义 difftool 并按照 @jarodeells 建议手动调用它更好的解决方案:

[diff]
    tool = mydiff
[difftool "mydiff"]
    cmd="script.sh \"$LOCAL\" \"$REMOTE\""

然后显式调用它:

$ git difftool -t mydiff someFileWith.ext

【问题讨论】:

  • 您能否更具体地了解解决方案?另外我认为在 cmd 行的末尾有一个额外的引号。
  • 实际上,script.sh 之后还有一个额外的",这不是必需的。现在应该没问题了:-)
  • 我完成了您提出的解决方案,但是当我这样做时,git difftool --cached 脚本没有捕捉到该选项并且不起作用。你遇到过这个问题吗?

标签: git version-control git-merge git-diff git-config


【解决方案1】:

更新:见下面的@Ackdari cmets。外部工具不必是基于命令行的。我不确定 git 在使用外部工具时如何使用 binary = True,但我怀疑所有流程都可能需要它才能工作。

如果您的外部差异工具* 仅是命令行(无 GUI), 您可以为此使用内置的 gitattributes

.gitconfig 添加:

[diff "my_diff"]
    command = Tools/csv_diff
    binary = true # Not sure this is required.

并在.gitattributes(全局或每个存储库,请参阅here)中添加:

*.csv diff=my_diff

[*] 外部 diff 工具的命令将由 git 调用,其中包含手册 hereGIT_EXTERNAL_DIFF 下详述的 7 个参数。

【讨论】:

  • 嗯,你的评论实际上让我现在失去平衡:-)。 Git 对“差异驱动程序”(在 .gitconfig 中的 diff 部分下定义)和“差异工具”(在 difftool 部分下定义)做了一些区分,我记得读过驱动程序必须是文本-基于,但我现在在手册中的任何地方都看不到它。所以请尝试一下,它可能会起作用!如果是这样,请发表评论,我会更新答案。另一件事我不知道我之前怎么错过的是将binary = true 添加到驱动程序定义的选项(就在command = Tools/csv_diff 下方)。也许这就是需要的改变。
  • 对其进行了测试并且可以正常工作(编写了一个仅显示cli参数并将.jpg作为二进制文件的程序)但binary = true对我来说不是必需的。但我仍然想知道为什么我不能像 merge.<driver>.driver 那样更改 cli 参数的提供方式(参见 docu
  • @Ackdari 酷!我想知道的一件事是当 git 需要 显示文本差异并且定义了 GUI 工具时会做什么(例如,当您执行 git log -p 以返回一些提交时)...
  • 在我的设置 git 中只显示 Binary files /dev/null and b/bild.jpg differ
  • 好的,这就是 git 通常对二进制文件显示的内容,所以我猜它在某处被检测为二进制文件。
【解决方案2】:

如果尚不支持,请安装一个关闭扩展并调用正确合并工具的 shell 脚本。

【讨论】:

  • 是的,这可能是一个解决方案,但我想避免自定义解决方案。我很感兴趣是否可以通过gitconfig(如标签所示)。
猜你喜欢
  • 2016-03-11
  • 2017-09-05
  • 2014-09-24
  • 2023-04-04
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 2017-07-06
相关资源
最近更新 更多