最近我在使用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 ? 我如何配置它来使用它作为一个差异工具?


当前回答

再延伸一下@Joseph的回答:

应用这些命令后,你的全局.gitconfig文件将有以下几行(为了加快进程,你可以将它们复制到文件中):

[merge]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe
    trustExitCode = false
[diff]
    guitool = kdiff3
[difftool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe
    trustExitCode = false

其他回答

(当试图从WSL git中找到如何使用kdiff3时,我在这里结束了,并得到了最后的部分,所以我将为其他人发布我的解决方案,同时试图找到答案)

如何使用kdiff3作为WSL git的diff/合并工具

有了Windows更新1903,这就容易多了;只使用wslpath,不需要从Windows共享TMP到WSL,因为Windows端现在可以通过\ WSL $访问WSL文件系统:

[merge]
    renormalize = true
    guitool = kdiff3
[diff]
    tool = kdiff3
[difftool]
    prompt = false
[difftool "kdiff3"]
    # Unix style paths must be converted to windows path style
    cmd = kdiff3.exe \"`wslpath -w $LOCAL`\" \"`wslpath -w $REMOTE`\"
    trustExitCode = false
[mergetool]
    keepBackup = false
    prompt = false
[mergetool "kdiff3"]
    path = kdiff3.exe
    trustExitCode = false

在Windows更新1903之前

使用安装在Windows 10上的kdiff3作为WSL中git的diff/merge工具的步骤:

将kdiff3的安装目录添加到“Windows Path”中。 将TMP添加到WSLENV Windows环境变量中(WSLENV=TMP/up)。TMP目录将被git用于临时文件,就像以前修订的文件一样,因此该路径必须在windows文件系统上才能工作。 在.bashrc中将TMPDIR设置为TMP:

# If TMP is passed via WSLENV then use it as TMPDIR
[[ ! -z "$WSLENV" && ! -z "$TMP" ]] && export TMPDIR=$TMP

调用kdiff3时,将unix-path转换为windows-path。我的.gitconfig示例:

[merge]
    renormalize = true
    guitool = kdiff3
[diff]
    tool = kdiff3
[difftool]
    prompt = false
[difftool "kdiff3"]
    #path = kdiff3.exe
    # Unix style paths must be converted to windows path style by changing '/mnt/c/' or '/c/' to 'c:/'
    cmd = kdiff3.exe \"`echo $LOCAL | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\" \"`echo $REMOTE | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\"
    trustExitCode = false
[mergetool]
    keepBackup = false
    prompt = false
[mergetool "kdiff3"]
    path = kdiff3.exe
    trustExitCode = false

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

再延伸一下@Joseph的回答:

应用这些命令后,你的全局.gitconfig文件将有以下几行(为了加快进程,你可以将它们复制到文件中):

[merge]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe
    trustExitCode = false
[diff]
    guitool = kdiff3
[difftool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe
    trustExitCode = false

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

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

[merge]
    tool = kdiff3

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

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