我曾经试用过msysGit和Cygwin上的Git。它们本身都工作得很好,而且都能完美运行gitk和git-gui。
现在问题来了,如何配置合并工具呢?(Vimdiff在Cygwin上可以工作,但最好有一些更加用户友好的选择,以满足我们班里喜爱Windows的同事。)
我曾经试用过msysGit和Cygwin上的Git。它们本身都工作得很好,而且都能完美运行gitk和git-gui。
现在问题来了,如何配置合并工具呢?(Vimdiff在Cygwin上可以工作,但最好有一些更加用户友好的选择,以满足我们班里喜爱Windows的同事。)
在Charles Bailey的答案基础上,这是我的git设置,我使用免费的跨平台3方合并工具p4merge进行测试,该工具可以在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
您应该在 available 或者 valid 列表中看到 p4merge。如果没有,请更新您的 git。
如果 p4merge 被列为 available,那么它已经在您的 PATH 中了,您只需要设置 merge.tool:
git config --global merge.tool p4merge
如果它被标记为valid,那么除了定义merge.tool以外,您还需要定义mergetool.p4merge.path: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不会展开路径中的环境变量(如果您知道如何使其生效,请告诉我或更新此答案)cmd = \""c:/Program Files/TortoiseSVN/bin/TortoiseMerge.exe"\" -base:"$BASE" -theirs:"$REMOTE" -mine:"$LOCAL" -merged:"$MERGED"
- Ludovic Kutygit config --global mergetool.p4merge.cmd '"C:\\Program Files\\Perforce\\p4merge" $BASE $LOCAL $REMOTE $MERGED'
在 Windows 7 上的机器上使用,可以帮助我完成操作。 - Dan P.由于Git已经开始支持p4merge,因此设置mergetool.p4merge.cmd将不再起作用,请参见libexec/git-core/git-mergetool--lib.so。我们只需要为git指定合并工具的路径,例如p4merge:
git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge
那么它就会工作。
path = C:\\Program Files (x86)\\KDiff3\\kdiff3.exe
(注意双反斜杠) 。 - Someone Somewhere在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
简要地说,您可以通过设置用户配置变量 merge.tool
来设置默认合并工具。
如果合并工具是本地支持的工具之一,您只需要将 mergetool.<tool>.path
设置为工具的完整路径(将 <tool>
替换为您已配置的 merge.tool
)。
否则,您可以将 mergetool.<tool>.cmd
设置为在运行时使用 shell 变量 $BASE,$LOCAL,$REMOTE,$MERGED
设置为适当的文件进行 eval 的一点 shell 代码。无论您是直接编辑配置文件还是使用 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"
我发现在Github Windows中有两种配置“SourceGear DiffMerge”作为diff和merge工具的方法。
在命令提示符窗口中执行以下命令将更新您的.gitconfig文件以配置GIT使用DiffMerge:
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 版本直接支持 p4merge,因此
git config --global merge.tool p4merge
这应该是您需要的全部内容。无需设置cmd或路径。
我在Windows 7上使用msysGit时,不得不去掉额外的引用,不确定原因。
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'