Cygwin Git:合并工具kdiff3不可用

时间:2014-01-31 15:52:25

标签: git cygwin kdiff3

我正在尝试让我的cygwin git安装使用kdiff3。

我遵循诺姆刘易斯的指示:http://noamlewis.wordpress.com/2011/03/22/how-to-use-kdiff3-as-a-difftool-mergetool-with-cygwin-git/

但它不起作用:(

运行

 git mergetool -t kdiff3

给出了这个结果:

Normal merge conflict for ...
  {local}: modified file
  {remote}: modified file
Hit return to start merge resolution tool (kdiff3):
The merge tool kdiff3 is not available as '~/kdiff3.sh'

然而,正在运行

~/kdiff3.sh

按预期打开kdiff3。

这是我的.gitconfig:

[diff]
        tool = kdiff3
[merge]
        tool = kdiff3
[mergetool "kdiff3"]
        path = ~/kdiff3.sh
        keepBackup = false
        trustExitCode = false

kdiff3.sh

#!/bin/sh
RESULT=""
for arg
  do
    if [[ "" != "$arg" ]] && [[ -e $arg ]];
      then
        OUT=`cygpath -wa $arg`
      else
        OUT=$arg
      if [[ $arg == -* ]];
        then
          OUT=$arg
        else
          OUT="'$arg'"
      fi
    fi
    RESULT=$RESULT" "$OUT
  done
/cygdrive/c/Program\ Files\ \(x86\)/KDiff3/kdiff3.exe $RESULT

3 个答案:

答案 0 :(得分:6)

不需要wrap shell脚本。我正在使用安装在windows中的kdiff3并在path中设置其文件夹并在cygwin中设置git。如果您没有为kdiff3设置路径,则需要将cmd中的完整路径指定为cmd = /cygdrive/c/apps/KDiff3/kdiff3 ...

[diff]
    tool = kdiff3
[merge]
    tool = kdiff3
[difftool "kdiff3"]
    cmd = kdiff3 \"$(cygpath -wla $LOCAL)\" \"$(cygpath -wla $REMOTE)\"
    trustExitCode = false
[mergetool "kdiff3"]
    cmd = kdiff3 \"$(cygpath -wla $BASE)\" \"$(cygpath -wla $LOCAL)\" \"$(cygpath -wla $REMOTE)\" -o \"$(cygpath -wla $MERGED)\"
    keepBackup = false
    trustExitCode = false
[mergetool]
    prompt = false
[difftool]
    prompt = false

答案 1 :(得分:3)

简单的答案是你在git配置文件中没有'〜'(显然)。

所以更换这一行:

[mergetool "kdiff3"]
    path = ~/kdiff3.sh

有了这个:

[mergetool "kdiff3"]
    path = /home/mike.hadlow/kdiff3.sh

让它工作正常。

答案 2 :(得分:0)

对我来说,解决方案是更改全局.gitconfig文件。 运行时

git config --global -l 

我得到了这个

  

mergetool.kdiff3.cmd =' C:/ Program Files(x86)/KDiff3/kdiff3.exe'   " $ BASE" " $ LOCAL" " $ REMOTE" -o" $ MERGED"

这正是应该的样子。 我的问题是我安装了sourcetree并且它被劫持了#34;工具设置。

我的.gitconfig文件有上面的命令 [mergetool" sourcetree"]

将此行更改为 [mergetool" kdiff3"]

解决了这个问题。