【问题标题】:git bash: Can't spawn kdiff3 as difftoolgit bash:无法将 kdiff3 生成为 difftool
【发布时间】:2014-12-03 02:45:45
【问题描述】:

我正在尝试在 Windows 8.1 系统上的 Git Bash 中使用 KDiff3 作为 difftool,我承认我对 Git 还很陌生。当我尝试将暂存文件与已提交文件进行比较时,我无法打开 KDiff3,我对如何处理它感到困惑。我在网上找到了将 KDiff3 设置为 merge 工具的说明,我猜想我需要做一些类似的事情来将其设置为 diff 工具(我还没有能够为新手找到足够明确的方向来设置差异工具,这就是我在这里的原因)。这是我下载并安装 KDiff3 后所做的:

 git config --global diff.tool kdiff3
 git config --global difftool.kdiff3.cmd '"C:\\Program Files\\KDiff3\\kdiff3" $BASE $LOCAL $REMOTE -o $MERGED'

Git 没有向我发出任何错误,所以也许这是正确的?我完全承认我看不懂这里的语法!无论如何,当我尝试这个时:

 git diff HEAD

我明白了:

 error: cannot spawn kdiff3: No such file or directory
 external diff died, stopping at MyFile.R

我环顾四周,发现一些人在 $PATH 设置不正确时遇到了类似问题。我真的不知道 $PATH 是什么(如果有人能启发我,我将非常感激),但我为 KDiff3 (C:\Program Files\KDiff3\kidff3) 获得的路径绝对是kdiff3.exe 位于我的机器上。有什么建议吗?

提前致谢,正如我所说,我是 Git 新手,所以如果我没有提供一些关键信息,请告诉我。

【问题讨论】:

  • 也许粘贴您的.gitconfig 文件的内容,看看那里是否有任何异常?它应该位于您的主用户目录中。

标签: git bash kdiff3 difftool


【解决方案1】:

我建议你放弃你的第二行配置,因为 Git bash 已经定义了如何使用 kdiff3。 (你可以看看你安装的Git Bash,比如我的路径下,我可以找到C:\Program Files (x86)\Git\libexec\git-core\mergetools\kdiff3,就是kdiff3的配置文件) .您唯一需要做的就是将 kdiff3 放入您的 PATH 变量中。

只使用你的第一行:

git config --global diff.tool kdiff3

但不是你的第二行:

#### comment out this line:
# git config --global difftool.kdiff3.cmd '"C:\\Program Files\\KDiff3\\kdiff3" $BASE $LOCAL $REMOTE -o $MERGED'

要修复您已经添加的配置,请尝试在您的 GIT BASH 下编辑您的 .gitconfig

vim ~/.gitconfig

找到[difftool "kdiff3"] 部分,并删除该部分下带有cmd= 的行。您也可以删除整个部分(即也删除包含 [difftool "kdiff3"] 的行

然后将你的路径添加到 kdiff3:

PATH=$PATH:"/c/Program Files/KDiff3"

由于“程序”和“文件”之间有空格,所以需要双引号。

此 PATH 行可以添加到您的 .bashrc 或 .bash_profile 中,具体取决于您启动 bash 的方式...

--- 更新 ---

更正: 由于 Git Bash 使用 Windows 系统定义的环境变量 'PATH' + Windows 用户定义的环境变量 'PATH'。上述 PATH 更改更难(使用 .bashrc 等)。只需更改 Windows 环境变量,例如 this link 和/或 this link

【讨论】:

  • 其实“GIT BASH”中包含的bash,并没有使用dos风格的路径。 "/c/Program Files/KDiff3" 是比 C:\\Program Files\\KDiff3 正确的路径
  • 感谢@Robin 的回复。如何将我的路径添加到 kdiff3?哪里是?我不确定 .bashrc 或 .bash_profile 指的是什么。我通过转到“开始”菜单并单击 Git Bash 的图标来打开 bash 窗口,因此我没有使用命令行界面来开始。
【解决方案2】:

在 GitBash 中更改您的第二行:

git config --global diff.tool kdiff3
git config --global difftool.kdiff3.path 'c:\Program Files\KDiff3\kdiff3.exe'

全局.gitconfig 中的对应部分如下所示:

[diff]
    tool = kdiff3
[difftool "kdiff3"]
    path = c:\\Program Files\\KDiff3\\kdiff3.exe 

只是为了避免混淆:

现在git difftool HEAD 启动kdiff3

git diff HEAD 仍然显示 GitBash 中的变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2020-09-19
    • 1970-01-01
    相关资源
    最近更新 更多