如何在Git Extensions中使用Winmerge?

59
我正在使用Git Extensions,它预安装并设置KDiff作为解决合并冲突的差异工具。然而我更喜欢Winmerge,并希望用Winmerge替换KDiff。
在Git Extensions设置中,有更改Mergetool的选项,但我无法弄清楚我应该使用什么语法以及为什么。似乎有4个变量:$BASE,$LOCAL,$REMOTE,$MERGED,我应该将这些传递给WinMergeU.exe,但是要使用哪些命令行参数呢?
我已经尝试过几次搜索,但没有一个答案实际上似乎可行。

2
这两篇文章或许可以帮到你:https://dev59.com/SHVC5IYBdhLWcg3wjx5d#949242 和 https://dev59.com/8nI-5IYBdhLWcg3wYnSQ#1884517。 - VonC
1
请查看我的答案,这是最简单、点-and-click 的解决方案。 - Cristian Diaconescu
5个回答

57

概述
以下是设置GIT版本控制的说明,以便您可以使用比默认安装更好的工具集。此设置要求已经安装了GIT扩展,并涉及在GIT扩展中配置Winmerge。

安装
按照所有提示进行操作,并将其安装在Winmerge的默认目录中。

在GIT版本控制中配置Winmerge
在文本编辑器中打开一个新文档。 复制/粘贴以下内容并将该文档保存为“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"

进入你的"用户->用户名"目录,找到 .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 Extensions->Git Config”。如果您正确安装并引用了工具到它们的目录,那么您的全局设置页面应该如下所示(注意:请在姓名和电子邮件上填写您自己的信息):

合并工具:winmerge
合并工具路径:c:/Program Files (x86)/winmerge/winmergeu.exe
合并工具命令:wMerge.sh "$MERGED" "$REMOTE"
比较工具:winmerge
比较工具路径:c:/Program Files (x86)/winmerge/winmergeu.exe
比较工具命令:"c:/Program Files (x86)/winmerge/winmergeu.exe" "$LOCAL" "$REMOTE"

行尾:检出保持不变,提交保持不变

转到“检查清单”选项卡以验证GIT是否全部“绿色”并满足您的设置。


我把wMerge.sh放在/Git/bin/里,但是出现了这个错误:/mingw64/libexec/git-core/git-mergetool--lib: 第133行:wMerge.sh: 找不到命令 - Lucas Bustamante
为WinMerge添加-r选项,以启用文件树视图和平面列表视图。否则,您将被困在一次只能查看一个文件夹的视图中。cmd = "'c:/Program Files (x86)/winmerge/winmergeu.exe'" -r "$LOCAL" "$REMOTE" - ttulinsky
请注意,WinMerge的较新版本不在(x86)文件夹中。 - CJBS

25

在Git Extensions v2.47.3中,设置这个非常容易:

设置 -> 全局设置 -> 在“Mergetool”的下拉菜单中手动输入:WinMerge,然后观看奇迹。

'Difftool' 下拉菜单也是如此。

enter image description here

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

这里输入图片描述

在下拉菜单中预设“WinMerge”选项不是一个好主意,这太傻了。无论如何。


1
这是最简单的解决方案 :) - n.podbielski
2
在 Git Extensions 3.0 中,设置的路径为:工具 -> 设置 -> Git -> 配置。 - kismert

12

在 Windows 7 上,下面是最终适用于我的方法。请注意,在我的程序文件路径周围使用了 "'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

这解决了我的Windows 10和Visual Studio 2015问题。谢谢! - Tobias Wärre

9

@sebastiaan的回答对我没有用(也许已经过时了?)

以下是使用GitExtensions 2.28适用于我的“全局设置”:

合并工具:winmerge
合并工具路径:D:/path/to/WinMerge/WinMergeU.exe
合并工具命令:"D:/path/to/WinMerge/WinMergeU.exe" -e "$MERGED"
这将使WinMerge使用git生成的“冲突文件”。
-e可按ESC键关闭winmerge。

差异工具:winmerge
差异工具路径:D:/path/to/WinMerge/WinMergeU.exe
差异工具命令:"D:/path/to/WinMerge/WinMergeU.exe" -e "$LOCAL" "$REMOTE" -dl "Local" -dr "Remote"
-dl-dr设置左侧和右侧面板的描述。


这就是正确的答案...对我来说问题在于GitExtensions默认设置中没有包括“-dl“本地” -dr“远程”的WinMerge。谢谢! - Nathan Bedford

3
在配置文件中添加或更改以下内容:
[merge]
    tool = winmerge
[mergetool "winmerge"]
    cmd = $PROGRAMFILES/WinMerge/WinMergeU.exe "$PWD/$MERGED"

这个解决方案有两个独特之处:

  1. 仅调用WinMergeU.exe *conflictfile*,而双侧调用则会受到左窗口呈现的<<<<<<<=======>>>>>>>标记的影响,这些标记是$MERGED包含的。
  2. 在每个仓库上应用mergetool - 我正在编辑$GIT_DIR/config文件。通过调用不带--system或--global参数的git config也可以达到同样的结果。需要注意的是,有几种配置范围可供选择

$PROGRAMFILES变量由git bash维护,并且(与本机Windows cmd上的类似变量不同)它导航到“Program Files(x86)”。


我认为这里不需要$PWD。这个答案对我来说没有问题。 - robertpateii

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