在 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 diff
sh
sh -c "git diff"