如何在 git 中使用不同的合并和差异工具?

How to use different merge and diff tool in git?

我更喜欢使用 meld 作为比较工具。但是它没有快速解决所有简单冲突的选项,所以在合并的情况下我想使用 kdiff3

我已经将 merge.tool 设置为 kdiff3,将 diff.guitool 设置为 meld,但 git difftool 仍然总是 运行 kdiff3

[merge]
        tool = kdiff3
        conflictstyle = diff3

[diff]
        guitool = meld
        renames = copies
        mnemonicPrefix = true

[difftool]
        prompt = false

如何制作git difftool运行meld?

diff.guitool only applies if you use the --gui flag.

设置 diff.toolmerge.tool 应该使 git difftoolgit mergetool 使用不同的工具:

[merge]
        tool = kdiff3

[diff]
        tool = meld

注意:自 Git 2.22(2019 年第 2 季度)起,{diff,merge}.{tool,guitool} 配置变量的组合以合理的顺序作为彼此的后备设置。

参见 commit 6c22d71, commit 7f978d7, commit 60aced3, commit 884630b, commit 05fb872 (29 Apr 2019), and commit 57d93c1, commit e9d309e (24 Apr 2019) by Denton Liu (Denton-L)
(由 Junio C Hamano -- gitster -- in commit 85ac27e 合并,2019 年 5 月 19 日)

在您的情况下,由于未定义 difftool:

difftool: fallback on merge.guitool

In git-difftool.txt, it says

'git difftool' falls back to 'git mergetool' config variables when the difftool equivalents have not been defined.

但是,当缺少 diff.guitool 时,它不会回退到 任何事物。当 diff.guitool 为 git-difftool 后退到 merge.guitool 不见了。

The documentation 现在包括:

git difftool -g/--gui

When 'git difftool' is invoked with the -g or --gui option, the default diff tool will be read from the configured diff.guitool variable instead of diff.tool.
The --no-gui option can be used to override this setting.

If diff.guitool is not set, we will fallback in the order of merge.guitool, diff.tool, merge.tool until a tool is found.