git for Windows: tortoisegitmerge 只能从 bash 命令行启动,而不是 git gui

git for Windows: tortoisegitmerge can only be launched from bash command line, but not git gui

我在 Windows7 64 位系统下使用 64 位 git-for-windows 2.12.2。另外,我在 E:\Program Files\TortoiseGit 下安装了 64 位 TortoiseGit 2.4.0。现在,我尝试将 tortoisegitmerge.exe 设置为合并工具,然后在 bashgit gui.

下使用它

这是我对全局 .gitconfig 文件的设置:

[merge]
    tool = tortoisemerge    
[mergetool "tortoisemerge"]
    path = E:\Program Files\TortoiseGit\bin\TortoiseGitMerge.exe

此设置来自此处的一个答案:git - Why doesn't tortoisemerge work as my mergetool? - Stack Overflow

如果我尝试从命令行启动合并工具,效果很好,请参阅下面的日志:

123@123-PC MINGW64 /d/code/cb/cb_sf_git/trunk (test_merge_gui|AM 3/19)
$ git mergetool
Merging:
src/CodeBlocks_wx31.cbp

Normal merge conflict for 'src/CodeBlocks_wx31.cbp':
  {local}: modified file
  {remote}: modified file

123@123-PC MINGW64 /d/code/cb/cb_sf_git/trunk (test_merge_gui|AM 3/19)
$ git am --continue

可以看到我运行git mergetool后打开window的截图,看来tortoisegitmerge已经解决了冲突,所以我就这样了单击保存按钮,并关闭乌龟git合并,和运行 git am --continue

但是当发生冲突时,我可以打开git gui gui工具,看这里拍的图,你看,这里显示了一个冲突。

当我右键单击并单击 "merge tool" 上下文菜单时,出现这样的错误消息框,它说:"Unsupported merge tool 'tortoisemerge'",请参见下图:

同时,我尝试了 .gitconfig 中的其他设置,例如:

[merge]
        tool = tortoisemerge
[mergetool "tortoisemerge"]
        cmd = '"E:/Program Files/TortoiseGit/bin/TortoiseGitMerge.exe" -base:"$BASE" -theirs:"$REMOTE" -mine:"$LOCAL" -merged:"$MERGED"'

但是从 bash 启动时仍然存在其他错误,见下文:

123@123-PC MINGW64 /d/code/cb/cb_sf_git/trunk (test_merge_gui|AM 3/19)
$ git mergetool
Merging:
src/CodeBlocks_wx31.cbp

Normal merge conflict for 'src/CodeBlocks_wx31.cbp':
  {local}: modified file
  {remote}: modified file
/mingw64/libexec/git-core/git-mergetool--lib: line 128: E:/Program Files/TortoiseGit/bin/TortoiseGitMerge.exe -base:$BASE -theirs:$REMOTE -mine:$LOCAL -merged:$MERGED: No such file or directory
src/CodeBlocks_wx31.cbp seems unchanged.
Was the merge successful [y/n]?

当尝试从 git gui 的上下文菜单启动合并工具时,我得到了同样的消息框 "Unsupported merge tool 'tortoisemerge'"。

我尝试了 cmdpath 字段的其他设置,但运气不好,都失败了。

有人可以帮忙吗?谢谢。

编辑: 我已经尝试了这个 Whosebug 问题中的所有设置:Why can't I use TortoiseMerge as my git merge tool on Windows? - Stack Overflow,但没有运气,所有设置都因相同的错误而失败。

调试了一段时间后,我想我已经完全解决了这个问题,只需在文件 mergetool.tcl.

中添加一段代码即可
tortoisemerge {
    #set cmdline [list "$merge_tool_path" -base:"$BASE" -mine:"$LOCAL" -theirs:"$REMOTE" -merged:"$MERGED"]
    #Note: no quote around the $BASE like variables, because those cause escaped quote
    #and it looks like TortoiseGitMerge does not support such formats.
    set cmdline [list "$merge_tool_path" -base:$BASE -mine:$LOCAL -theirs:$REMOTE -merged:$MERGED]
}

那么问题就解决了。在这里查看一些讨论:google group discussion.