Answers:
为了跟踪Charles Bailey的答案,这是我的git设置,它使用p4merge(免费的跨平台3way合并工具);在msys Git(Windows)安装上进行了测试:
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'
或者,从Windows cmd.exe shell,第二行变为:
git config --global mergetool.p4merge.cmd "p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
所做的更改(相对于Charles Bailey):
下载:http : //www.perforce.com/product/components/perforce-visual-merge-and-diff-tools
编辑(2014年2月)
正如@Gregory Pakosz指出的那样,最新的msys git现在“本地”支持p4merge(在1.8.5.2.msysgit.0上测试)。
您可以通过运行以下命令显示支持的工具列表:
git mergetool --tool-help
您应该在可用或有效列表中看到p4merge。如果没有,请更新您的git。
如果p4merge被列为可用,则它在您的PATH中,您只需设置merge.tool即可:
git config --global merge.tool p4merge
如果它被列为有效,你必须定义mergetool.p4merge.path除了merge.tool:
git config --global mergetool.p4merge.path c:/Users/my-login/AppData/Local/Perforce/p4merge.exe
~
应扩展到当前用户的主目录(因此理论上路径应为~/AppData/Local/Perforce/p4merge.exe
),但这对我不起作用$LOCALAPPDATA/Perforce/p4merge.exe
),git似乎没有为路径扩展环境变量(如果您知道如何使之工作,请让我知道或更新此答案)mergetool.p4merge.cmd
自Git开始尝试支持p4merge以来,该设置将不再起作用,请参见libexec/git-core/git-mergetool--lib
。相反,它直接使用mergetool.p4merge.path
cmd = \""c:/Program Files/TortoiseSVN/bin/TortoiseMerge.exe"\" -base:"$BASE" -theirs:"$REMOTE" -mine:"$LOCAL" -merged:"$MERGED"
git config --global mergetool.p4merge.cmd '"C:\\Program Files\\Perforce\\p4merge" $BASE $LOCAL $REMOTE $MERGED'
自从Git开始尝试支持p4merge以来,设置mergetool.p4merge.cmd不再起作用,请参见libexec / git-core / git-mergetool--lib.so我们只需要为git指定mergetool路径,例如p4merge:
git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge
然后它将起作用。
我在WinXP上使用Portable Git(请款待!),需要解决分支中出现的冲突。在我检查过的所有GUI中,KDiff3被证明是使用最透明的。
但是我在此博客文章中找到了使它在Windows中运行所需的说明,这些说明与此处列出的其他方法稍有不同。从根本上说,这相当于将这些行添加到我的.gitconfig
文件中:
[merge]
tool = kdiff3
[mergetool "kdiff3"]
path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe
keepBackup = false
trustExitCode = false
现在工作很好!
path = C:\\Program Files (x86)\\KDiff3\\kdiff3.exe
(注意双反斜杠)
在Cygwin领导下,对我而言唯一起作用的是:
git config --global merge.tool myp4merge
git config --global mergetool.myp4merge.cmd 'p4merge.exe "$(cygpath -wla $BASE)" "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)" "$(cygpath -wla $MERGED)"'
git config --global diff.tool myp4diff
git config --global difftool.myp4diff.cmd 'p4merge.exe "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)"'
另外,我想关闭difftool的提示消息:
git config --global difftool.prompt false
git mergetool
完全可配置,因此您几乎可以选择自己喜欢的工具。
完整的文档在这里:http : //www.kernel.org/pub/software/scm/git/docs/git-mergetool.html
简而言之,您可以通过设置用户config变量来设置默认的mergetool merge.tool
。
如果合并工具是它本机支持的工具之一,则只需将其设置mergetool.<tool>.path
为该工具的完整路径(替换<tool>
为您配置的内容)merge.tool
。
否则,您可以设置一些mergetool.<tool>.cmd
要在运行时评估的shell,并将shell变量$BASE, $LOCAL, $REMOTE, $MERGED
设置为适当的文件。转义是直接编辑配置文件还是使用git config
命令设置变量,必须谨慎一点。
这样的事情应该可以使您做得到(例如“ mymerge”是一种虚构的工具)。
git config merge.tool mymerge
git config merge.mymerge.cmd 'mymerge.exe --base "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'
设置完您最喜欢的合并工具后,只需运行即可 git mergetool
只要有冲突要解决就可以。
Perforce的p4merge工具是一个非常好的独立合并工具。
在Windows 7上无法比拟
git config --global merge.tool bc3
git config --global mergetool.bc3.path "C:\Program Files (x86)\Beyond Compare 3\BCompare.exe"
似乎较新的git版本直接支持p4merge,因此
git config --global merge.tool p4merge
如果p4merge.exe在您的路径上,则应该是您所需要的。无需设置cmd或路径。
我从他们的手册(http://manual.winmerge.org/CommandLine.html)使用名为WinMerge(http://winmerge.org/)信息的应用程序
这是我mergetool
通过指令使用的bash脚本.gitconfig
#!/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的结果,并在正确的位置创建一个新的临时文件。
我发现了两种在github Windows中将“ SourceGear DiffMerge ” 配置为difftool和mergetool的方法。
“命令提示符”窗口中的以下命令将更新您的.gitconfig,以使用DiffMerge配置GIT:
git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd 'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\"'
git config --global merge.tool diffmerge
git config --global mergetool.diffmerge.cmd 'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe -merge -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"'
[ 或 ]
将以下行添加到您的.gitconfig中。该文件应位于您的主目录中的C:\ Users \ UserName中:
[diff]
tool = diffmerge
[difftool "diffmerge"]
cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\"
[merge]
tool = diffmerge
[mergetool "diffmerge"]
trustExitCode = true
cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe -merge -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
您可能也想添加以下选项:
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
另外,我不知道为什么,但是米兰·加迪安(Milan Gardian)的答案中的引号和斜线为我搞砸了。
如果有人想将gvim用作TortoiseGit上的差异工具,则需要在文本输入中输入外部差异工具的路径:
path\to\gvim.exe -f -d -c "wincmd R" -c "wincmd R" -c "wincmd h" -c "wincmd J"
对于Windows环境中的IntelliJ IDEA(社区版)3路git mergetool配置(~/.gitconfig
)
西格温
[mergetool "ideamerge"]
cmd = C:/Program\\ Files\\ \\(x86\\)/JetBrains/IntelliJ\\ IDEA\\ Community\\ Edition\\ 14.1.3/bin/idea.exe merge `cygpath -wa $LOCAL` `cygpath -wa $REMOTE` `cygpath -wa $BASE` `cygpath -wa $MERGED`
[merge]
tool = ideamerge
微系统
[mergetool "ideamerge"]
cmd = "/c/Program\\ Files\\ \\(x86\\)/JetBrains/IntelliJ\\ IDEA\\ Community\\ Edition\\ 14.1.3/bin/idea.exe" merge `~/winpath.sh $LOCAL` `~/winpath.sh $REMOTE` `~/winpath.sh $BASE` `~/winpath.sh $MERGED`
[merge]
tool = ideamerge
〜/ winpath.sh用于将路径转换为msys上的Windows,并且取自stackoverflow上的msys路径转换问题
#! /bin/sh
function wpath {
if [ -z "$1" ]; then
echo "$@"
else
if [ -f "$1" ]; then
local dir=$(dirname "$1")
local fn=$(basename "$1")
echo "$(cd "$dir"; echo "$(pwd -W)/$fn")" | sed 's|/|\\|g';
else
if [ -d "$1" ]; then
echo "$(cd "$1"; pwd -W)" | sed 's|/|\\|g';
else
echo "$1" | sed 's|^/\(.\)/|\1:\\|g; s|/|\\|g';
fi
fi
fi
}
wpath "$@"
如果在从SourceTree打开p4merge时遇到问题,请在MyRepo.git下查找名为config的本地配置文件,然后删除所有合并配置。就我而言,它试图打开我刚刚卸载的Meld