如何使WinMerge成为我的git合并工具?
我正在尝试将WinMerge与Git集成,就像我以前在Windows7Ultimate上看到的那样 我遵循了以下步骤,但是当我使用默认为vimdiff的git mergetool时,仍然会出现一个错误 在git:C/Program Files(x86)/git/with:winmergu的根目录中创建了一个名为winmerge.sh的文件,这是正确的位置如何使WinMerge成为我的git合并工具?,git,winmerge,difftool,mergetool,Git,Winmerge,Difftool,Mergetool,我正在尝试将WinMerge与Git集成,就像我以前在Windows7Ultimate上看到的那样 我遵循了以下步骤,但是当我使用默认为vimdiff的git mergetool时,仍然会出现一个错误 在git:C/Program Files(x86)/git/with:winmergu的根目录中创建了一个名为winmerge.sh的文件,这是正确的位置 #!/bin/sh echo Launching WinMergeU.exe: $1 $2 "C:/Program Files (x86)/W
#!/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
您的路径不正确,应该是
“/c/程序文件(x86)/WinMerge/winmergu.exe”
您正在shell脚本环境中运行,而不是本机windows命令提示符。这是我的(在*nix上的%userprofile%\.gitconfig
或~/.gitconfig
中),没有包装(Win 7 Home Pro):
这更容易做到,对我来说也很有效:
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
您正在谈论合并工具,但您(以及其他一些有答案的人)正在将其配置为一个diff工具
要配置合并工具,您需要使用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在评论中提到,您可以为winmerge的结果文件指定第三个文件(outputpath参数),这值得称赞
为了完整起见,我要提到的是,winmerge的完整配置也旨在作为diff和merge工具。在与此争论了一个多小时后,我安装了winmerge,到目前为止,它正是我想要的
Winmerge for Tortoise git的设置在中描述。如果您决定使用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,或者,如果在安装过程中选择了正确的路径选项,则启动Windows命令提示符并执行以下操作:
git config --global mergetool.keepBackup false
这将停止Git创建*.orig文件。您还可以通过在用户目录的根目录中定位.gitconfig文件来直接编辑配置文件。如果您知道如何使用VIM,可以使用以下命令编辑整个内容:
git config --global --edit
例如:
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
Git 2.5+(2015年第二季度)将把Winmerge作为一个已知的
如果Winmerge位于%PATH%
中,则只需使用git config merge.tool Winmerge
即可(它也适用于diff工具:
git config diff.tool winmerge
)
2015年5月20日,见
(于2015年6月1日被合并)帮助人: 现在,所有配置都直接在Git中完成,包括:
- diff命令:
“$merge\u tool\u path”-u-e“$LOCAL”“$REMOTE”
- 合并命令:
“$merge\u tool\u path”-u-e-dl Local-dr Remote“$Local”“$Remote”“$MERGED”
mergetools
:将winmerge添加为内置工具
使用中描述的命令添加winmerge scriptlet,以便
用户可以使用winmerge而无需执行任何
附加配置
要将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
通过命令行输入设置已包含在其他答案中。用于与WinMerge进行完全三向合并的
.gitconfig
文件可以如下配置(此示例来自Windows):
旗帜资料:
- /e-允许只需按一次“esc”键即可关闭WinMerge
- /u-防止WinMerge将文件记录在最近使用的列表中
- /dl、/dm和/dl—左窗格、中窗格和右窗格的说明
- /o-输出文件。保存任何窗格将把该窗格的内容输出到输出文件
trustExitCode=true
告诉git接受输出,无需进一步提示
keepBackup=false
将自动删除自动生成的*.orig
文件
注意:使用difftool时,$BASE和$MERGE变量都只包含文件名。我最初对@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
似乎没有必要将远程/本地/基本参数括在引号中,以满足其中包含空格的路径的需要
此配置用于将中间窗格用作合并的输出文件
我遇到的问题是,当尝试合并时,WinMerge无法打开。Sourcetree启动Git以打开您选择的工具。使用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
[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 '
D:\Program Files\WinMerge\WinMergeU.exe /e /ub /fm /wl /wr /dl %tname /dm %bname /dr %yname %theirs %base %mine /o %merged /am
[mergetool "winmerge"]
cmd = WinMergeU -e -ub -fm -wl -wr $LOCAL $BASE $REMOTE -o $MERGED -am