我正在尝试将WinMerge与Git集成,因为我之前在Windows 7旗舰版上看到过其他人。
我已经按照以下步骤进行了操作,但是当我执行git mergetool(默认为vimdiff)时会出现错误。
在git的根目录中创建了一个名为winmerge.sh的文件:C / Program Files(x86)/ Git / with: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
答案 0 :(得分:58)
您正在谈论合并工具,但您(以及其他一些有答案的人)正在将其配置为差异工具。
要配置合并工具,您需要使用merge.tool
和mergetool
配置,而不是diff.tool
和difftool
,如下所示:
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的评论在评论中提到,在command line parameters中你可以为winmerge(outputpath参数)的结果文件指定第三个文件。
为了完整起见,我会提到还有this gist针对完全配置winmerge作为差异和合并工具。
答案 1 :(得分:25)
Git 2.5 +(2015年第二季度)将Winmerge列为已知的git mergetool
!
如果Winmerge在%PATH%
,您只需要git config merge.tool winmerge
!
(它也适用于diff工具:git config diff.tool winmerge
)
2015年5月20日commit 3e4f237旁边的David Aguilar (davvid
)
(Junio C Hamano -- gitster
--在commit 324a9f4中合并,2015年6月1日)
帮助:Philip Oakley (PhilipOakley
),Johannes Schindelin (dscho
),Sebastian Schuberth (sschuberth
),SZEDER Gábor (szeder
)
所有配置现在都是直接在Git中完成的,mergetools/winmerge
:
"$merge_tool_path" -u -e "$LOCAL" "$REMOTE"
"$merge_tool_path" -u -e -dl Local -dr Remote "$LOCAL" "$REMOTE" "$MERGED"
mergetools
:将winmerge添加为内置工具使用this thread中描述的命令添加winmerge scriptlet,所以 用户可以使用winmerge而无需执行任何操作 其他配置。
答案 2 :(得分:24)
如果您决定使用SourceTree(或任何使用SourceTree的Google搜索者),您可以通过将合并工具设置为自定义,将Diff命令指向WinMergeU.exe,将WinMerge用于合并工具,通常为:
C:\Program Files (x86)\WinMerge\WinMergeU.exe
在参数中使用:
-e -u -dl "Mine" -wr -dr "Theirs" $LOCAL $REMOTE $MERGED
这将导致左侧(标记为“我的”)可编辑,并且当您在WinMerge中保存时它将是输出文件。右侧(标记为“他们的”)将是只读的(这是-wr参数),这是必需的,因为WinMerge将所有保存的文件输出到$ MERGED文件,因此如果双方都被编辑,它将输出左侧然后用右边覆盖;最好避免那种混乱。
如果您打开备份文件选项,WinMerge将生成.bak文件。如果您多次保存,此文件的内容将是原始左侧文件,或者倒数第二个输出文件。您可以将其关闭,或将* .bak添加到.gitignore文件中。
Git本身会在冲突解决后创建一个* .orig冲突文件,以防万一你搞砸了。同样,您可以将* .orig添加到.gitignore文件或关闭此功能。不幸的是,SourceTree没有这个GUI选项,所以启动你的git bash,或者,如果你在安装过程中选择了正确的PATH选项,那么Windows命令提示符会执行以下操作:
git config --global mergetool.keepBackup false
这将阻止Git创建* .orig文件。您还可以通过在用户目录的根目录中找到.gitconfig文件来直接编辑配置文件。如果您知道如何使用VIM,则可以使用以下命令编辑整个内容:
git config --global --edit
答案 3 :(得分:13)
这是我的(%userprofile%\.gitconfig
或* {n}上的~/.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\"
答案 4 :(得分:7)
这样做更容易,对我有用:
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
答案 5 :(得分:4)
您的路径不正确,应为"/c/Program Files (x86)/WinMerge/WinMergeU.exe"
。
您正在shell脚本环境中运行,而不是本机Windows命令提示符。
答案 6 :(得分:3)
将WinMerge作为Visual Studio 2017 Git插件的比较和合并工具:
在Windows命令提示符下:输入>> git config --global --edit 这将打开.getconfig文件进行编辑。
请使用以下命令进行更新:
[mergetool]
prompt = false
keepBackup = false
keepTemporaries = false
[merge]
tool = winmerge
[mergetool "winmerge"]
name = WinMerge
trustExitCode = true
cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
[diff]
tool = winmerge
[difftool "winmerge"]
name = WinMerge
trustExitCode = true
cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" -u -e $LOCAL $REMOTE
答案 7 :(得分:1)
经过一个多小时的麻烦之后,我安装了tortoisegit,到目前为止它正在给我我想要的东西。
在http://thoai-nguyen.blogspot.com.au/2012/03/setup-tortoise-git-and-winmerge.html
中描述了Winmerge for Tortoise git的设置答案 8 :(得分:1)
通过命令行输入设置已被其他答案覆盖。与WinMerge进行完整三向合并的.gitconfig
文件可以这样配置(此示例来自Windows):
[merge]
tool = WinMerge
[mergetool "WinMerge"]
cmd = \"C:\\Program Files\\WinMerge\\WinMergeU.exe\" -e -u -dl \"Local\" -dm \"Base\" -dr \"Remote\" \"$LOCAL\" \"$BASE\" \"$REMOTE\" -o \"$MERGED\"
trustExitCode = true
keepBackup = false
[diff]
tool = WinMerge
[difftool "WinMerge"]
cmd = \"C:\\Program Files\\WinMerge\\WinMergeU.exe\" -e -u -dl \"Old $BASE\" -dr \"New $BASE\" \"$LOCAL\" \"$REMOTE\"
trustExitCode = true
标志信息:
trustExitCode = true
告诉git在没有进一步提示的情况下接受输出。
keepBackup = false
将自动删除自动生成的*.orig
文件。
注意:使用difftool时,$ BASE和$ MERGE变量都只包含文件名。
答案 9 :(得分:1)
在安装TortoiseGit和WinMerge 2.16(此版本支持3向合并)之后,我发现WinMerge如何将自身集成到TortoiseGit:
D:\Program Files\WinMerge\WinMergeU.exe /e /ub /fm /wl /wr /dl %tname /dm %bname /dr %yname %theirs %base %mine /o %merged /am
所以我编辑了.gitconfig
文件并更改了一些变量以使其对我有用(我将WinMerge dir添加到系统路径中):
[mergetool "winmerge"]
cmd = WinMergeU -e -ub -fm -wl -wr $LOCAL $BASE $REMOTE -o $MERGED -am
答案 10 :(得分:0)
示例:
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
答案 11 :(得分:0)
我最初赞成@CapinWinky对于使用SourceTree中的WinMerge的回答。该答案仍然有效,但是WinMerge现在还支持需要附加参数的三向合并。
在“ SourceTree选项”对话框中,我选择“自定义”作为合并工具,并输入命令为:
C:\Program Files\WinMerge\WinMergeU.exe
,参数为:
-u -fm -wl -wr -dl Remote_RO -dm Local_Merged -dr Base_RO $REMOTE $LOCAL $BASE -o $MERGED
似乎不必将remote / local / base参数用引号引起来,以适应其中包含空格的路径。
此配置用于将中间窗格用作合并的输出文件。
我有一个问题,当尝试合并时,WinMerge无法打开。 Sourcetree启动Git打开您选择的工具。使用Sourcetree的自定义选项时,您的git配置文件(例如C:\ Users \ Me \ .gitconfig)被修改为添加一个名为“ sourcetree”的新合并工具,并且Git命令包括--tool=sourcetree
。在某些时候,.gitconfig文件没有正确更新,在该部分中我有两行“ cmd”,其中一行坏了:
[mergetool "sourcetree"]
cmd = 'C:/Program Files/WinMerge/WinMergeU.exe' -u -fm -wl -wr -dl Remote_RO -dm Local_Merged -dr Base_RO $REMOTE $LOCAL $BASE -o $MERGED
trustExitCode = true
cmd = 'C:/Program '
手动修复.gitconfig文件可以解决此问题。