我正在尝试让我的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
答案 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"]
解决了这个问题。