57

我正在使用Git Extensions,它预先安装并设置 KDiff 作为 diff 工具来解决合并冲突。不过,我非常喜欢 Winmerge,并想用 Winmerge 替换 KDiff。

在 Git Extensions 设置中,有更改 Mergetool 的设置,但我似乎无法弄清楚我应该使用什么语法以及为什么。似乎有 4 个变量:$BASE、$LOCAL、$REMOTE、$MERGED。看来我应该将这些传递给 WinMergeU.exe,但是使用哪些命令行参数?

我已经尝试搜索了几次,但实际上似乎没有任何答案。

4

5 回答 5

56

概述
以下是有关如何设置 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”。如果您已正确完成安装并在其目录中引用了工具,您的全局设置页面应如下所示(注意:请在姓名和电子邮件中填写您的姓名):

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

行尾:按原样签出,按原样提交

于 2011-11-18T22:48:11.890 回答
25

在 Git Extensions v2.47.3 上,设置它真的很容易:

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

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

在此处输入图像描述

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

在此处输入图像描述

'WinMerge' 选项没有预先填充在下拉列表中,这很愚蠢。那好吧。

于 2014-05-30T22:11:59.107 回答
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
于 2013-03-20T14:10:30.700 回答
8

@sebastiaan 的回答对我不起作用(也许它已经过时了?)

这些是使用 GitExtensions 2.28 对我有用的“全局设置”:

Mergetool:winmerge
mergetool 的路径:D:/path/to/WinMerge/WinMergeU.exe
Mergetool 命令:"D:/path/to/WinMerge/WinMergeU.exe" -e "$MERGED"
这会导致 WinMerge 使用 git 生成的“冲突文件”。
-e允许按 ESC 关闭 winmerge。

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

于 2012-01-03T15:50:05.913 回答
3

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

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

这个解决方案在两个方面是不同的:

  1. 简单的调用WinMergeU.exe *conflictfile*,而两侧调用会受到左侧窗口存在<<<<<<<, =======>>>>>>>$MERGED 包含的标记的影响。
  2. 在每个 repo 基础上应用 mergetool - 我正在编辑 $GIT_DIR/config 文件。通过不带 --system 或 --global 参数调用 git config 可以获得相同的结果。这是要注意有几个配置范围可供选择

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

于 2013-02-14T22:56:03.520 回答