我在Windows7 64位系统下使用64位git-for-windows 2.12.2。 另外,我在E:\Program Files\TortoiseGit
下安装了64位的TortoiseGit 2.4.0。 现在,我已经尝试将tortoisegitmerge.exe设置为合并工具,然后在bash
和git gui
下使用它。
这是我的全局.gitconfig
文件的设置:
[merge] tool = tortoisemerge [mergetool "tortoisemerge"] path = E:\\Program Files\\TortoiseGit\\bin\\TortoiseGitMerge.exe
这个设置来自这里的一个答案: git – 为什么不把我的合并工具作为toolbox? – 堆栈溢出
这工作正常,如果我尝试从命令行启动合并工具,请参阅下面的日志:
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
,你可以看到打开的窗口的镜像,看起来像是tortoisegitmerge已经修复了冲突,所以我只需点击Savebutton,closurestortoisegitmerge,然后运行git am --continue
。
但是当发生冲突时,我可以打开git gui
gui工具,看到这里拍摄的图像,看,这里显示出一个冲突。
当我右键单击并单击“合并工具”上下文菜单,我得到这样的错误消息框,它说:“不支持的合并工具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
上下文菜单启动合并工具时,我会得到同样的消息框,提示“不支持的合并工具”tortoisemerge'“。
我尝试了cmd
或path
字段的其他设置,但没有任何运气,都失败了。
任何人都可以帮忙? 谢谢。
编辑:我已经尝试在此stackoverflow问题中的所有设置: 为什么我不能在Windows上使用TortoiseMerge作为我的git合并工具? – 堆栈溢出 ,但没有运气,都失败了相同的错误。
经过一段时间的调试,我想我已经完全解决了这个问题,只需在文件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] }
那么问题就可以解决了。 请参阅这里的一些讨论: 谷歌小组讨论 。