在 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
到我的 .git/config.
现在我跑
git difftool
它调用 KDiff3 而不是我的 difftool。我做错了什么?
备注:我正在使用 difftool 而不是 mergetool,因为它更容易测试,而且我相信如果我设法配置 difftool,那么如何配置 mergetool 对我来说就很明显了。
编辑:
Difftool 现在可以使用了。
.git/配置:
[diff "difftool"]
command = difftool.git.sh
.git/信息/属性:
.ext diff=difftool
difftool.git.sh(在路径中)
#!/bin/sh
difftool.jar "$2" "$5"
但是在 Windows 上有一个副作用:git diff
现在会导致 APPCRASH。
编辑:
我已经想出了如何避免 git diff
崩溃或挂起的方法:应该使用 git difftool
或通过 调用
: git diff
>shsh -c "git diff"
最佳答案
您将在 gitattributes
file 中使用 merge 驱动程序.
例如参见“How do I tell git to always select my local version for conflicted merges on a specific file?”
*.ext merge=mymergetool
您可以在 gitattributes 文件中使用模式。
关于Git:为 difftool 和 mergetool 配置模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7403102/