我怎样才能让WinMerge成为我的git mergetool?

我正在尝试将WinMerge与Git集成在一起,就像我之前在Windows 7旗舰版上看到的那样。

我按照下面的步骤,但是当我做一个默认为vimdiff的git mergetool时,错误仍然显示出来。

在git:C / Program Files(x86)/ Git /的根目录下创build一个名为winmerge.sh的文件:WinMergeU是正确的位置。

#!/bin/sh echo Launching WinMergeU.exe: $1 $2 "C:/Program Files (x86)/WinMerge/WinMergeU.exe" git /e /u /dl "Base" /dr "Mine" "$1" "$2" 

并使用以下命令。

 git config --global diff.tool winmerge git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\"" git config --global difftool.prompt false 

错误显示为:

 git config option merge.tool set to unknown tool: winmerge 

我一直在努力寻找过去几个月的解决scheme。 如果任何人都可以帮助我解决这个问题,将不胜感激! 还有关于我的电脑的问题,让我知道。

你正在谈论合并工具 ,但你(和其他一些有答案的人)正在configuration它作为一个diff工具

要configuration合并工具,您需要使用diff.toolmergetoolconfiguration,而不是diff.tooldifftool ,如下所示:

 git config --global merge.tool winmerge git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"" git config --global mergetool.prompt false 

然后你可以使用

 git mergetool 

这将打开你的两个文件进行编辑。

@dvdvck在评论中提到,在命令行参数中可以指定winmerge(outputpath参数)的结果文件的第三个文件。

为了完整起见,我会提到这个目标也是为了将winmerge作为diff和merge工具的完整configuration。

如果您决定使用SourceTree(或者任何带有SourceTree的Googlesearch器),则可以使用WinMerge作为合并工具,方法是将合并工具设置为自定义,将Diff命令指向WinMergeU.exe,通常为:

 C:\Program Files (x86)\WinMerge\WinMergeU.exe 

在参数中使用:

 -e -u -dl "Mine" -wr -dr "Theirs" $LOCAL $REMOTE $MERGED 

这将导致左侧(标为“我的”)是可编辑的,这将是保存在WinMerge中的输出文件。 右侧(标为“Theirs”)将是只读的(这是-wr参数),因为WinMerge将所有保存的文件输出到$ MERGED文件中,所以需要这样做,所以如果双方都被编辑了,则会输出左侧覆盖右侧; 最好避免这种混乱。

如果保持备份文件选项打开,WinMerge将生成一个.bak文件。 如果您保存了多次,此文件的内容将是原始左侧文件或倒数第二个输出文件。 您可以closures此function,或将* .bak添加到.gitignore文件中。

Git本身会在冲突得到解决之后创build一个* .orig冲突文件,以防万一。 再次,您可以将* .orig添加到.gitignore文件或closures此function。 不幸的是,SourceTree没有这个GUI选项,所以启动你的git bash,或者,如果你在安装过程中select了正确的PATH选项,则执行下面的命令:

 git config --global mergetool.keepBackup false 

这将停止Git创build* .orig文件。 您也可以通过在您的用户目录的根目录中find.gitconfig文件来直接编辑configuration文件。 如果您知道如何使用VIM,则可以使用以下命令编辑整个事物:

 git config --global --edit 

Git 2.5+(Q2 2015)将包括Winmerge作为一个已知的git mergetool

如果Winmerge在你的%PATH% ,一个git config merge.tool winmerge是你所需要做的!
(它也适用于diff工具: git config diff.tool winmerge

请参阅2015年5月20日的David Aguilar( davvid ) 提交的3e4f237 。
(由Junio C gitster合并- gitster -在2015年6月1日的324a9f4 )
帮助: 菲利普·奥克利( PhilipOakley ) , 约翰内斯· dschodscho ) , 塞巴斯蒂安·舒伯特( sschuberth ) , SZEDER加博尔( szeder

所有的configuration现在都可以直接在Git中使用mergetools/winmerge

  • diff命令: "$merge_tool_path" -u -e "$LOCAL" "$REMOTE"
  • 合并命令: "$merge_tool_path" -u -e -dl Local -dr Remote "$LOCAL" "$REMOTE" "$MERGED"

mergetools :添加winmerge作为内置工具

用这个线程中描述的命令添加一个winmerge scriptlet,这样用户就可以使用winmerge而不需要执行任何额外的configuration。

这里是我的(在%userprofile%\.gitconfig~/.gitconfig上的~/.gitconfig ),没有包装(Win 7 Home Pro):

 [diff] tool = winmerge [difftool "winmerge"] cmd = c:/path/to/winmergeu.exe -e -u -x -wl -wr -dl "base" -dr "mine" \"$LOCAL\" \"$REMOTE\" 

这很容易做,是我的工作:

 git config --global diff.tool winmerge git config --replace --global difftool.winmerge.cmd "\"C:\path to winmerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" $LOCAL $REMOTE" git config --global difftool.prompt false 

你的path不正确,应该是"/c/Program Files (x86)/WinMerge/WinMergeU.exe"

您正在shell脚本环境中运行,而不是本地windows命令提示符。

经过一个多小时的讨论之后,我安装了rtoisegit ,到目前为止,它正在给我我想要的东西。

Winorge for Tortoise Git的设置在http://thoai-nguyen.blogspot.com.au/2012/03/setup-tortoise-git-and-winmerge.html

例:

 git config --global --add diff.tool winmerge git config --replace --global difftool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" $LOCAL $REMOTE" git config --global difftool.prompt false