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

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


当前回答

设置mergetool.p4merge。cmd将不再工作,因为Git已经开始尝试支持p4merge,请参阅libexec/ Git -core/ Git -mergetool——lib。所以我们只需要为git指定mergetool路径,例如p4merge:

git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge

那么它就会起作用。

其他回答

Git mergetool是完全可配置的,所以你可以选择你最喜欢的工具。

完整的文档在这里:http://www.kernel.org/pub/software/scm/git/docs/git-mergetool.html

简而言之,您可以通过设置用户配置变量merge.tool来设置默认的合并工具。

如果合并工具是本地支持的工具之一,你只需要设置mergetool.<tool>。工具完整路径的路径(将<tool>替换为您已配置的merge. conf。成为工具。

否则,可以设置mergetool.<tool>。在运行时将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工具是一个非常好的独立合并工具。

对于kdiff3,您可以使用:

git config --global merge.tool kdiff3
git config --global mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global mergetool.kdiff3.trustExitCode false

git config --global diff.guitool kdiff3
git config --global difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global difftool.kdiff3.trustExitCode false

为了跟进Charles Bailey的回答,这里是我使用p4merge(免费跨平台3way合并工具)的git设置;安装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\""

变化(相对于查尔斯·贝利):

added to global git config, i.e. valid for all git projects not just the current one the custom tool config value resides in "mergetool.[tool].cmd", not "merge.[tool].cmd" (silly me, spent an hour troubleshooting why git kept complaining about non-existing tool) added double quotes for all file names so that files with spaces can still be found by the merge tool (I tested this in msys Git from Powershell) note that by default Perforce will add its installation dir to PATH, thus no need to specify full path to p4merge in the command

下载:http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools。


编辑(2014年2月)

正如@Gregory Pakosz所指出的,最新的msysgit现在“本地”支持p4merge(在1.8.5.5.2 .msysgit.0上测试)。

您可以通过运行以下命令显示支持的工具列表:

git mergetool --tool-help

您应该在可用或有效列表中看到p4merge。如果没有,请更新git。

如果p4merge被列出为可用,它在你的PATH中,你只需要设置merge.tool:

git config --global merge.tool p4merge

如果它被列为有效的,则必须定义mergetool.p4merge。除了merge.tool之外的路径:

git config --global mergetool.p4merge.path c:/Users/my-login/AppData/Local/Perforce/p4merge.exe

The above is an example path when p4merge was installed for the current user, not system-wide (does not need admin rights or UAC elevation) Although ~ should expand to current user's home directory (so in theory the path should be ~/AppData/Local/Perforce/p4merge.exe), this did not work for me Even better would have been to take advantage of an environment variable (e.g. $LOCALAPPDATA/Perforce/p4merge.exe), git does not seem to be expanding environment variables for paths (if you know how to get this working, please let me know or update this answer)

在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或路径。