如何在Git扩展中使用Winmerge?

我使用的是Git扩展 ,它预先安装并设置KDiff作为解决合并冲突的diff工具。 我非常喜欢Winmerge,并想用WinmergereplaceKDiff。

在Git扩展设置中,有设置来更改Mergetool,但我似乎无法弄清楚我应该使用什么语法,为什么。 似乎有4个variables:$ BASE,$ LOCAL,$ REMOTE,$ MERGED。 看来我应该把这些传给WinMergeU.exe,但用哪个命令行参数呢?

我已经尝试了几次search,但没有答案,似乎工作。

概观
以下是有关如何设置GIT版本控制的说明,以便您可以使用比默认安装更好的一组工具。 该设置要求已安装GIT扩展,并且需要在GIT扩展中configurationWinmerge。

安装
浏览所有提示并安装在Winmerge的默认目录中。

在GIT版本控制中configurationWinmerge
在文本编辑器中打开一个新的文档。 复制/粘贴以下内容并将文档保存为“wMerge.sh”到您的“C:\ Program Files(x86)\ Git \ bin \”目录中。

echo Launching WinMerge: $1 $2 "C:/Program Files (x86)/WinMerge/WinMergeU.exe" -e -u -dl "Original" -dr "Modified" "$1" "$2" 

转到您的“用户 – >用户名”目录并find.gitconfig文件。 打开你最喜欢的编辑器复制/粘贴下面的代码并保存:

 [user] name = enter your name email = youremail@yourdomain.com [core] autocrlf = false [merge] tool = winmerge [mergetool "winmerge"] cmd = wMerge.sh \"$MERGED\" \"$REMOTE\" path = c:/Program Files (x86)/winmerge/winmergeu.exe [mergetool] keepBackup = false trustExitCode = false [diff] guitool = winmerge [difftool "winmerge"] path = c:/Program Files (x86)/winmerge/winmergeu.exe cmd = \"c:/Program Files (x86)/winmerge/winmergeu.exe\" \"$LOCAL\" \"$REMOTE\" 

运行“GitExtensions”,转到“工具 – >设置 – > Git扩展 – > Gitconfiguration”。 如果你已经正确地完成了你的安装,并将这些工具引用到他们的目录中,那么你的全局设置页面应该如下所示(注意:请填写姓名和电子邮件地址):

mergetool: winmerge
mergetool的path: c:/Program Files (x86)/winmerge/winmergeu.exe
mergetool命令: wMerge.sh "$MERGED" "$REMOTE"
difftool: winmerge
pathto difftool: c:/Program Files (x86)/winmerge/winmergeu.exe
difftool命令: "c:/Program Files (x86)/winmerge/winmergeu.exe" "$LOCAL" "$REMOTE"

行结束:原样签出,按原样提交

导航到清单选项卡,以validationGIT是“绿色”,并满意您的设置。

在Git Extensions v2.47.3上,设置它非常简单:

设置 – >全局设置 – >在“Mergetool”下拉菜单中手动写入: WinMerge并观看奇迹。

“Difftool”下拉菜单也一样。

在这里输入图像说明

 || || || \/ \/ \/ 

在这里输入图像说明

这只是愚蠢的'WinMerge'选项没有预先填充在下拉列表中。 好吧。

在Windows 7上,这是最终为我工作。 请注意我的程序文件path中的"'c:/path/here'"引号。

 [merge] tool = winmerge [mergetool "winmerge"] cmd = "'C:/Program Files (x86)/WinMerge/WinMergeU.exe'" -e "$MERGED" [diff] tool = winmerge [difftool "winmerge"] cmd = "'C:/Program Files (x86)/WinMerge/WinMergeU.exe'" -e "$LOCAL" "$REMOTE" -dl "Local" -dr 

@ sebastiaan的答案不适合我(也许它已经过时了?)

这些是使用GitExtensions 2.28工作的“全局设置”:

Mergetool: winmerge
mergetoolpath: D:/path/to/WinMerge/WinMergeU.exe
Mergetool命令: "D:/path/to/WinMerge/WinMergeU.exe" -e "$MERGED"
这会导致WinMerge使用由git生成的“冲突文件”。
-e允许按下ESCclosureswinmerge。

Difftool: winmerge
difftool的path: D:/path/to/WinMerge/WinMergeU.exe
Difftool命令: "D:/path/to/WinMerge/WinMergeU.exe" -e "$LOCAL" "$REMOTE" -dl "Local" -dr "Remote"
-dl-dr设置左侧和右侧窗格的描述。

在configuration文件中添加或更改以下内容:

 [merge] tool = winmerge [mergetool "winmerge"] cmd = $PROGRAMFILES/WinMerge/WinMergeU.exe "$PWD/$MERGED" 

该解决scheme在两个方面是明显的:

  1. 只需调用WinMergeU.exe *conflictfile* ,而双面调用遭受左手窗口呈现<<<<<<<=======>>>>>>>标记的事实$ MERGED包含。
  2. 在每个回购的基础上应用mergetool – 我正在编辑$ GIT_DIR / config文件。 调用没有–system或–global参数的git config也可以达到同样的结果。 这是要注意的是,有几个configuration范围可供select 。

$ PROGRAMFILESvariables由git bash维护(与本机windows cmd上的类似variables不同),它导航到“Program Files(x86)”。