Git:配置difftool和mergetool的模式

时间:2011-09-13 13:57:38

标签: git mercurial difftool mergetool

在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。 < / p>

修改

Difftool现在有效。

的.git /配置:

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

的.git /信息/属性:

.ext diff=difftool

difftool.git.sh(在PATH中)

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

但是在Windows上存在副作用:git diff现在导致APPCRASH。

修改

我已经找到了如何避免git diff崩溃或悬空:一个人应该使用git difftool或通过git diff致电shsh -c "git diff"

1 个答案:

答案 0 :(得分:4)

您可以在gitattributes file中使用合并驱动程序。

例如,请参阅“How do I tell git to always select my local version for conflicted merges on a specific file?

*.ext merge=mymergetool

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