最近我在使用GitExtension 2.46,但是Git版本是1.9.4.msysgit.2。为了只使用Git命令,我卸载了GitExtension并安装了最新版本的Git和KDiff3。

当我进行合并并且有冲突时,我运行以下命令:

git mergetool

然后我收到了这样的信息:

合并工具kdiff3不能作为'kdiff3'使用。

我猜它肯定是通过KDiff3路径。

环境

操作系统:Windows 10 Git 2.6。1 windows。 KDiff3 0.9.98(64位)

问题:

我必须在.gitconfig文件中配置git mergetool命令,以打开带有冲突文件的LOCAL、REMOTE、BASE和MERGED版本的KDiff3 GUI ? 我如何配置它来使用它作为一个差异工具?


当前回答

我需要添加命令行参数或KDiff3将只打开没有文件,并提示我为基础,本地和远程。我使用了TortoiseHg提供的版本。

此外,我还需要使用老式的DOS 8.3文件名。

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    cmd = /c/Progra~1/TortoiseHg/lib/kdiff3.exe $BASE $LOCAL $REMOTE -o $MERGED

但是,它现在可以正常工作了。

其他回答

2021年更新:

在Git 2.33 (Q3 2021)中,在Windows上,mergetool已经被教导查找kdiff3.exe,就像查找winmerge.exe一样。

Git配置全局合并。工具kdiff3就足够了。

参见Michael Schindler提交47eb4c6(2021年6月07日)(michaelcompressconsult)。 (由Junio C Hamano—gitster—在commit b7bd70d中合并,2021年7月8日)

mergetools/kdiff3:让kdiff3也能在Windows上工作 署名:Michael Schindler michael@compressconsult.com

Windows上的git mergetool(man)找不到本地的kdiff3 mergetool。 系统提示“The merge tool kdiff3 is not available as 'kdiff3'”。 就像我们转换二进制文件的名称并在WinMerge的搜索路径上查找它一样,对kdiff3执行相同的操作以找到它。


2018:

为了修正kris的回答,从Git 2.20(2018年第四季度)开始,Git合并工具的正确命令将是

git config --global merge.guitool kdiff3 

这是因为“git mergetool”学会了使用“——[no-]gui”选项,就像 “git difftool”可以。

参见刘丹顿(丹顿- l)的commit c217b93, commit 57ba181, commit 063f2bd(2018年10月24日)。 (由Junio C Hamano—gitster—在commit 87c15d1中合并,2018年10月30日)

合并工具:接受-g/——[no-]gui作为参数 与difftool接受-g/——[no-]gui选项的方式一致,使mergetool接受相同的选项以使用merge。Guitool变量来查找默认的mergetool而不是merge.tool。

好吧,问题是Git无法在%PATH%中找到KDiff3。

在典型的Unix安装中,所有可执行文件都位于几个众所周知的位置(/bin/, /usr/bin/, /usr/local/bin/等),你可以通过在shell处理器中键入程序名称来调用程序(例如cmd.exe)。

在微软Windows中,程序通常安装在专用路径中,因此不能简单地在cmd会话中键入kdiff3并让kdiff3运行。

困难的解决方案:您应该通过指定KDiff3 .exe的完整路径来告诉Git在哪里可以找到KDiff3。不幸的是,Git不喜欢在它的配置中的路径规范中使用空格,所以最后一次我需要这个,我最终得到了那些古老的“C:\Progra~1…\kdiff3.exe”,就好像它是90年代末一样:)

简单的解决方案:编辑您的计算机设置并在%PATH%中包含kdiff3.exe目录。然后测试是否可以从cmd.exe中通过名称调用它,然后运行Git。

我需要添加命令行参数或KDiff3将只打开没有文件,并提示我为基础,本地和远程。我使用了TortoiseHg提供的版本。

此外,我还需要使用老式的DOS 8.3文件名。

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    cmd = /c/Progra~1/TortoiseHg/lib/kdiff3.exe $BASE $LOCAL $REMOTE -o $MERGED

但是,它现在可以正常工作了。

Mac用户

下面是@Joseph接受的答案,但是Mac的默认安装路径为kdiff3

(请注意,您可以复制和粘贴这个,并运行它在一个去)

git config --global merge.tool kdiff3 
git config --global mergetool.kdiff3.path  "/Applications/kdiff3.app/Contents/MacOS/kdiff3" 
git config --global mergetool.kdiff3.trustExitCode false

git config --global diff.guitool kdiff3
git config --global difftool.kdiff3.path "/Applications/kdiff3.app/Contents/MacOS/kdiff3"
git config --global difftool.kdiff3.trustExitCode false

与接受的答案相同,但有新的安装路径,便于复制/粘贴:

git config --global merge.tool kdiff3
git config --global mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global mergetool.kdiff3.trustExitCode false

git config --global diff.guitool kdiff3
git config --global difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global difftool.kdiff3.trustExitCode false