Git:为 difftool 和 mergetool 配置模式

标签 git mercurial difftool mergetool

在 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 >sh: sh -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/

相关文章:

git - 我应该有多少个分支?我怎么知道的?

git - 如果在同一个存储库上并行运行更多 git 命令是否安全?

Mercurial 内置模板样式说明

git - 执行目录差异时 p4merge 失败?

Git 挤压 merge 还是 git 强制推送?

git - Jenkins 上下文中的 "workspace polling"是什么?

mercurial - Mercurial 是否有相当于 git 的 "describe"函数?

Mercurial - 使用类似于货架的队列?

visual-studio-2010 - 我可以在 Visual Studio 中使用 WinMerge 作为我的合并/差异工具吗?

visual-studio-code - 我可以在 VS Code difftool 模式下突出显示字符吗?