我在Cygwin上尝试了msysGit和Git。两者本身都工作得很好,并且都能完美地运行gitk和git-gui。

现在我该如何配置合并工具呢?(Vimdiff在Cygwin上工作,但我更希望能有一个对我们一些喜欢windows的同事更友好的东西。)


当前回答

要设置p4merge,使用chocoley在窗口上安装merge和diff,请看这里: https://gist.github.com/CamW/88e95ea8d9f0786d746a

其他回答

我用一个叫WinMerge的应用程序(http://winmerge.org/) 他们手册中的信息(http://manual.winmerge.org/CommandLine.html)

这是我通过.gitconfig从mergetool指令中使用的bash脚本

#!/bin/sh
# using winmerge with git
# replaces unix style null files with a newly created empty windows temp file

file1=$1
if [ "$file1" == '/dev/null' ] || [ "$file1" == '\\.\nul' ] || [ ! -e "$file1" ]
    then 
       file1="/tmp/gitnull"
       `echo "">$file1`
fi
file2=$2
if [ "$file2" == '/dev/null' ] || [ "$file2" == '\\.\nul' ] || [ ! -e "$file2" ]
    then 
       file2="/tmp/gitnull"
       `echo "">$file2`
fi
echo diff : $1 -- $2
"C:\Program files (x86)\WinMerge\WinMergeU.exe" -e -ub -dl "Base" -dr "Mine" "$file1" "$file2"

基本上,bash会在一个空文件中处理diff的结果,并在正确的位置创建一个新的临时文件。

我在WinXP上使用Portable Git(工作很好!),需要解决分支中出现的冲突。在我检查的所有gui中,KDiff3被证明是使用起来最透明的。

但是我在这篇博文中找到了让它在Windows中工作所需的说明,这些说明与这里列出的其他方法略有不同。它基本上相当于把这些行添加到我的.gitconfig文件中:

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe
    keepBackup = false
    trustExitCode = false

现在工作得很好!

你可能也想添加这些选项:

git config --global merge.tool p4mergetool
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'
git config --global mergetool.p4mergetool.trustExitCode false
git config --global mergetool.keepBackup false

另外,我也不知道为什么,但是米兰·加迪安的回答把我搞砸了。

如果有人想在TortoiseGit上使用gvim作为他们的差异工具,那么你需要在文本输入中输入外部差异工具的路径:

path\to\gvim.exe -f -d -c "wincmd R" -c "wincmd R" -c "wincmd h" -c "wincmd J"

新的git版本似乎直接支持p4merge,所以

git config --global merge.tool p4merge

如果p4merge.exe在你的路径上,这应该是你所需要的。不需要设置cmd或路径。