我已经使用以下选项将我的git实例配置为使用winmerge作为比较工具:
git config --global merge.tool winmerge
git config --replace --global mergetool.winmerge.cmd ""C:Program Files (x86)WinMergeWinMergeU.exe" -e -u -dl "Base" -dr "Mine" "$LOCAL" "$REMOTE""
git config --global mergetool.prompt false
当我在冲突的文件上运行"git mergetool"时,我会看到带有冲突文件的winmerge窗口,并且我可以像正常合并一样使用winmerge来解决冲突。
当我保存文件并被git提示回答合并是否成功时,我回答"y",我想我已经完成了。
然而,当我查看新合并的文件时,我看到<lt<lt<lt<HEAD和>>>>>>原点/主标记(当我保存最终合并文件时,这些标记不在winmerge窗口中)。我还在文件夹中看到了该文件的LOCAL.bak和REMOTE.bak版本。
我以前从未在合并文件中留下HEAD和原点标记,也从未在合并后留下LOCAL.bak和REMOTE.bak文件。就好像它们是在我对成功合并问题回答"y"后添加的,因为它们没有显示在winmerge窗口中。我是否缺少某种配置选项?我似乎不明白它为什么这么做。
您错误地设置了gitmergetool。工作配置(发布于https://gist.github.com/shawndumas/6158524)使用winmerge作为difftool和mergetool是:
[mergetool]
prompt = false
keepBackup = false
keepTemporaries = false
[merge]
tool = winmerge
[mergetool "winmerge"]
name = WinMerge
trustExitCode = true
cmd = "/c/Program\ Files\ \(x86\)/WinMerge/WinMergeU.exe" -u -e -dl "Local" -dr "Remote" $LOCAL $REMOTE $MERGED
[diff]
tool = winmerge
[difftool "winmerge"]
name = WinMerge
trustExitCode = true
cmd = "/c/Program\ Files\ \(x86\)/WinMerge/WinMergeU.exe" -u -e $LOCAL $REMOTE
.bak文件由WinMerge在保存修改后的文件时创建。如果你查看WinMerge选项,你会发现默认情况是将这些备份文件(如果你愿意,它们是"更改前的安全副本")存储在与原始文件相同的文件夹中。您可以选择将它们存储在其他文件夹中。