7

在 Mercurial 中,可以为外部差异和合并工具定义一种模式(以便仅对与指定模式匹配的文件调用它们):

[diff-patterns]
**.ext = difftool
[merge-patterns]
**.ext = mergetool

如何在 Git 中定义这样的模式?

git-config(1) 中的 [mergetool] 部分没有提及任何模式、掩码或任何类似内容。

编辑

这是我的 .git/config 的相关部分:

[diff]
    tool = difftool
[difftool "difftool"]
    cmd = difftool.git.sh "$LOCAL" "$REMOTE" "$BASE"

[merge]
    tool = mergetool
[mergetool "mergetool"]
    cmd = mergetool.git.sh "$LOCAL" "$REMOTE" "$BASE" "$MERGED"

现在它适用于所有文件。

我希望仅对名称以结尾的文件调用 difftool 和 mergetool.ext

编辑

我添加了一个包含以下内容的文件 .git/info/attributes:

*.ext   diff=difftool
*.ext   merge=mergetool

我也加了

[diff "difftool"]
    name = my custom diff driver
    driver = difftool.git.sh %A %B %O
[merge "mergetool"]
    name = my custom merge driver
    driver = mergetool.git.sh %A %B %O %A

到我的 .git/config。

现在我跑

git difftool

它调用 KDiff3 而不是我的 difftool。我做错了什么?

备注:我正在使用 difftool 而不是 mergetool,因为它更容易测试,并且我相信如果我设法配置 difftool,那么如何配置 mergetool 对我来说将是显而易见的。

编辑

Difftool 现在可以工作了。

.git/配置:

[diff "difftool"]
    command = difftool.git.sh

.git/info/属性:

.ext diff=difftool

difftool.git.sh(在 PATH 中)

#!/bin/sh
difftool.jar "$2" "$5"

但是对 Windows 有一个副作用:git diff现在会导致 APPCRASH。

编辑

我已经想出了如何避免崩溃或挂起git diff:应该使用或git difftool调用:git diffshsh -c "git diff"

4

1 回答 1

4

gitattributes您将在文件中使用合并驱动程序。

参见例如“我如何告诉 git 始终选择我的本地版本以在特定文件上进行冲突合并?

*.ext merge=mymergetool

您可以在 gitattributes 文件中使用模式。

于 2011-09-13T14:03:00.283 回答