为什么我不能在Windows上将TortoiseMerge用作我的git合并工具?

47

我正在尝试进行我的第一次Git合并(很激动人心!),但是无法让Git Gui(来自Git 1.7.4.msysgit.0的0.13.GITGUI版本)在Windows 7上识别TortoiseMerge(1.6.11.20210 x64)。根据类似问题的回答,我进行了以下配置更改:

$ git config --global merge.tool tortoisemerge
$ git config --global mergetool.tortoisemerge.cmd 'TortoiseMerge.exe -base:"$BASE" -mine:"$LOCAL" -theirs:"$REMOTE" -merged:"$MERGED"'
$ git config --global --list
...snip...
merge.tool=tortoisemerge
mergetool.tortoisemerge.cmd=TortoiseMerge.exe -base:"$BASE" -mine:"$LOCAL" -theirs:"$REMOTE" -merged:"$MERGED"
$

很不幸,当我启动Git Gui并尝试"运行合并工具"时,我收到了错误信息Unsupported merge tool 'tortoisemerge'

有人能告诉我我做错了什么吗?以下是我的~/.gitconfig文件的相关部分:

[merge]
        tool = tortoisemerge
[mergetool "tortoisemerge"]
        cmd = TortoiseMerge.exe -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"

更新

当从命令行运行git mergetool时,TortoiseMerge与上述配置一起正常工作。看来只有Git Gui存在问题。:-/


TortoiseMerge.exe 是否在您的路径中?您尝试过指定完整路径吗? - Ben Voigt
@Ben — 确实在我的路径中,指定完整路径似乎没有任何效果。 :-/ - Ben Blank
您要合并的文件中有足够的空间吗? - VonC
@VonC — 在文件名中吗?不是。 - Ben Blank
@VonC - 你让我对这个充满了希望!注意到仓库中的某些路径有空格,但是祖先文件夹中有。将仓库移动到更高的文件夹中,以便路径中没有任何空格,但没有改变。尝试了该问题中建议的每种参数、引用和 cmd /c 的排列组合,甚至尝试升级 Git 并使用 mergetool.tortoisemerge.path 而不是 .cmd,但都无济于事。 :-( - Ben Blank
5个回答

60

如果您拥有最新的git,请运行以下命令行:

git config merge.tool tortoisemerge

重要提示:不要将.exe扩展名添加到该命令中。

如果该命令失败,或者您想添加一个Git不知道的其他合并工具,请执行以下操作:

在编辑器中打开以下文件之一:

  • 64位git:C:\Program Files\Git\mingw64\share\git-gui\lib\mergetool.tcl
  • 32位git:C:\Program Files (x86)\Git\share\git-gui\lib\mergetool.tcl

向mergetool.tcl文件中添加类似以下内容的代码:

tortoisemerge {
    set cmdline [list TortoiseMerge.exe -base:"$BASE" -mine:"$LOCAL" -theirs:"$REMOTE" -merged:"$MERGED"]
}

将新的TortoiseMerge条目放在这段代码上方:

default {
        error_popup [mc "Unsupported merge tool '%s'" $tool]
        return
}

附加示例:

要使用SourceGear diffmerge,请将以下内容添加到mergetool.tcl中:

diffmerge {
    set cmdline [list "C:/Program Files (x86)/SourceGear/DiffMerge/DiffMerge.exe" --merge --result=$MERGED $LOCAL $BASE $REMOTE]
}

7
哎呀,真是万幸。经过两年的时间,我们终于找到了解决办法! - Ben Blank
我在64位Windows上安装了最新的git-for-windows 2.12.2,但是tortoisegitmerge.exe不在PATH中,因此更新的答案和过时的答案都无法工作。两者都报告:不支持的合并工具“tortoisemerge”。而我的tortoisegit安装在E:\Program Files\TortoiseGit\bin\TortoiseGitMerge.exe。所以,有什么想法吗?谢谢。 - ollydbg23
非常好的注释。工作很顺利! - Douglas Mesquita
很遗憾,git gui的mergetool.tcl不支持mergetool.$tool.cmd :( - yoyo

16

1
同样的问题,恐怕还是存在。(当然现在错误信息是“不支持合并工具'tortoise'”。) - Ben Blank
9
必须提供完整路径并转义双引号:cmd = \""c:/Program Files/TortoiseSVN/bin/TortoiseMerge.exe"\" -base:"$BASE" -theirs:"$REMOTE" -mine:"$LOCAL" -merged:"$MERGED" - Ludovic Kuty
1
我遇到了文件名中带有空格的问题。以下语法可以解决这个问题:cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -mine \"$REMOTE\" -base \"$LOCAL\"。这适用于TortoiseGitMerge,而不是TortoiseMerge。 - Kai

6

针对我正在处理的情况,合并工具已经设置为TortoiseMerge,但它找不到它。

在Windows中提供完全限定的位置即可解决问题:

git config --global mergetool.tortoisemerge.cmd "\"C:\\Program Files\\TortoiseGit\\bin\\TortoiseGitMerge.exe\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\""

2

尝试在命令行中键入TortoiseMerge.exe,以确保它在路径中。如果没有,请通过“我的电脑”>“属性”>“高级”>“环境变量”>“系统变量”:Path添加它。

然后,在命令提示符下使用以下命令进行配置。

git config --replace --global diff.tool tortoisemerge
git config --replace --global difftool.diffmerge.cmd "TortoiseMerge.exe -base:\"$BASE\" -theirs:\"$REMOTE\" -mine:\"$LOCAL\" -merged:\"$MERGED\""
git config --replace --global difftool.prompt false

要在命令提示符中使用它,请在您的git工作目录内键入git difftool

它会逐个显示文件,因此最好安装TortoiseGit,即使只是为了处理diff部分,这样可以更轻松地处理事情。


我该如何打开基于GUI的工具来合并Git命令中的所有冲突文件? - Master

1

这个问题似乎在最新的Git版本中已经解决了(我使用的是git version 1.9.4.msysgit.1)。

C:\git\build>git mergetool

This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
tortoisemerge emerge vimdiff

C:\git\build>git config merge.tool tortoisemerge

C:\git\build>git mergetool
No files need merging

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接