Git:为差异工具和合并工具配置模式

7
在Mercurial中,可以定义一个外部diff和merge工具的模式(仅针对与指定的模式匹配的文件调用它们):
[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

to my .git/config.

Now I run

git difftool

它调用KDiff3而不是我的difftool。我做错了什么?
备注:我正在使用difftool而不是mergetool进行测试,因为它更容易测试,我相信如果我成功配置difftool,那么我将很容易地配置mergetool。 编辑:
现在difftool可以工作了。
.git/config:
[diff "difftool"]
    command = difftool.git.sh

.git/info/attributes:

.ext diff=difftool

difftool.git.sh (in PATH)

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

但是在Windows上有一个副作用: git diff现在会导致应用程序崩溃。

编辑:

我已经找到了避免git diff崩溃或挂起的方法: 应该使用git difftool或通过sh调用git diff: sh -c "git diff"


你好,能否更新答案并提供完整的分辨率?这里有很多编辑,以保持实际分辨率。 - JobaDiniz
1个回答

4

同样的方法适用于diff驱动程序吗?我无法使其工作。我真的需要一个简单的示例。 - utapyngo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接