【问题标题】:How to use Winmerge with Git Extensions?如何将 Winmerge 与 Git 扩展一起使用?
【发布时间】:2011-01-28 22:06:21
【问题描述】:

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

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

我已经尝试搜索了几次,但没有一个真正有效的答案。

【问题讨论】:

标签: git settings winmerge git-extensions


【解决方案1】:

概述
以下是有关如何设置 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
difftool 的路径:c:/Program Files (x86)/winmerge/winmergeu.exe
difftool 命令:"c:/Program Files (x86)/winmerge/winmergeu.exe" "$LOCAL" "$REMOTE"

行尾:按原样结帐,按原样提交

导航到清单选项卡以验证 GIT 是否全部为“绿色”并且对您的设置感到满意。

【讨论】:

  • 我将 wMerge.sh 放在 /Git/bin/ 中,但我得到了这个:/mingw64/libexec/git-core/git-mergetool--lib: line 133: wMerge.sh: command没找到
  • 将 -r 选项添加到 winmerge 以启用不同文件的树视图和平面列表视图。否则,您将被困在“一次一个文件夹”视图中。 cmd = "'c:/Program Files (x86)/winmerge/winmergeu.exe'" -r "$LOCAL" "$REMOTE"
  • 记住较新版本的 WinMerge 不在 (x86) 文件夹中
【解决方案2】:

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

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

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

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

【讨论】:

  • 这是正确的答案...对我来说问题是 WinMerge 的 GitExtensions 默认设置不包括“-dl”Local”-dr“Remote”。谢谢!
【解决方案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 可以获得相同的结果。这里要注意的是有a few scopes of configuration to choose from

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

【讨论】:

  • 我认为这里不需要 $PWD。没有它,这个答案对我来说很好。
【解决方案4】:

在 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 上的问题。谢谢!
【解决方案5】:

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

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

“Difftool”下拉菜单也是如此。

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

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

【讨论】:

  • 这是最简单的解决方案:)
  • 在Git Extensions 3.0中,设置的路径为:Tools -> Settings -> Git -> Config
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 2020-12-01
  • 2020-02-27
  • 1970-01-01
相关资源
最近更新 更多