如何将KDiff3配置为git的合并工具和diff工具?



最近我正在使用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.1
  • KDiff3 0.9.98(64位)

问题:

  • 我必须在。gitconfig文件中配置命令git mergetool以打开KDiff3 GUI的版本LOCALREMOTEBASE合并冲突文件?

  • 我如何配置它来使用它作为一个diff工具?

这些网站非常有帮助,几乎,合并工具和difftool。我使用了全局配置,但可以由存储库使用而没有问题。您只需要执行以下命令:

git config --global merge.tool kdiff3
git config --global mergetool.kdiff3.path "C:/Program Files/KDiff3/bin/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/bin/kdiff3.exe"
git config --global difftool.kdiff3.trustExitCode false

请注意,最新版本的kdiff3将可执行文件从应用程序文件夹C:/Program Files/kdiff3的根目录移到了应用程序文件夹中的bin/文件夹中。如果您使用的是旧版本,请删除"bin/"从上面的路径

trustExitCode 选项的使用取决于当diff工具返回时您想要做什么。从文档:

git-difftool在每个文件上单独调用一个diff工具。默认情况下,diff工具报告的错误将被忽略。使用——trust-exit-code使git-difftool在被调用的diff工具返回非零退出代码时退出。

只是延伸@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

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

更新2021:

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

git config --global merge.tool kdiff3就够了。

参见commit 47eb4c6 (07 Jun 2021) by Michael Schindler (michaelcompressconsult)。
(由juno 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 (Q4 2018)开始,git mergetool的正确命令将是

git config --global merge.guitool kdiff3 

那是因为"git mergetool";学会了接受"--[no-]gui";选项,就像";git difftool";。

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

mergetool:接受-g/--[no-]gui作为参数

difftool接受-g/--[no-]gui选项的方式一致,使mergetool接受相同的选项,以便使用merge.guitool变量来查找默认的合并工具,而不是merge.tool

问题是Git在%PATH%中找不到KDiff3。

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

在Microsoft Windows中,程序通常安装在专用路径中,因此您不能简单地在cmd会话中输入kdiff3并使KDiff3运行。

困难的解决方案:你应该通过指定kdiff3.exe的完整路径来告诉Git在哪里找到KDiff3。不幸的是,Git不喜欢在配置中的路径规范中使用空格,所以上次我需要这个时,我最终使用了那些古老的"C: programa ~1…kdiff3.exe",好像是在20世纪90年代末:)

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

我需要添加命令行参数,否则KDiff3只会在没有文件的情况下打开,并提示我选择base、local和remote。我使用的是TortoiseHg提供的版本。

另外,我需要使用旧的DOS 8.3文件名。

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

但是,它现在工作正常。

(当试图找出如何使用kdiff3从WSL git我结束在这里,并得到了最后的部分,所以我将张贴我的解决方案,任何人也绊倒在这里,同时试图找到答案)

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

使用Windows update 1903,这要容易得多;只要使用wspath,就不需要从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 update 1903之前

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

  1. 将kdiff3安装目录添加到Windows路径中。
  2. 将TMP添加到WSLENV Windows环境变量(WSLENV=TMP/up)。git将使用TMP目录存放临时文件,比如以前的文件版本,所以这个路径必须在windows文件系统上才能工作。
  3. 在.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
    

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

    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
    

    相关内容

    • 没有找到相关文章

    最新更新