Wei*_*Jin 49 git winmerge mergetool difftool
我正在尝试将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"
Run Code Online (Sandbox Code Playgroud)
并使用以下命令.
git config --global diff.tool winmerge
git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false
Run Code Online (Sandbox Code Playgroud)
错误显示为:
git config option merge.tool set to unknown tool: winmerge
Run Code Online (Sandbox Code Playgroud)
eis*_*eis 62
您正在谈论合并工具,但您(以及其他一些有答案的人)正在将其配置为差异工具.
要配置合并工具,您需要使用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
Run Code Online (Sandbox Code Playgroud)
然后你可以使用
git mergetool
Run Code Online (Sandbox Code Playgroud)
这将打开你要编辑的两个文件.
感谢@dvdvck在评论中提到,在命令行参数中,您可以为winmerge(outputpath参数)的结果文件指定第三个文件.
为了完整起见,我会提到还有一个要点是完全配置winmerge作为差异和合并工具.
小智 28
如果您决定使用SourceTree(或任何使用SourceTree的Google搜索者),您可以通过将合并工具设置为自定义,将Diff命令指向WinMergeU.exe,将WinMerge用于合并工具,通常:
C:\Program Files (x86)\WinMerge\WinMergeU.exe
Run Code Online (Sandbox Code Playgroud)
在参数中使用:
-e -u -dl "Mine" -wr -dr "Theirs" $LOCAL $REMOTE $MERGED
Run Code Online (Sandbox Code Playgroud)
这将导致左侧(标记为"我的")可编辑,当您在WinMerge中保存时它将是输出文件.右侧(标记为"他们的")将是只读的(这是-wr参数),这是必需的,因为WinMerge将所有保存的文件输出到$ MERGED文件,因此如果双方都被编辑,它将输出左侧然后用右边覆盖; 最好避免那种混乱.
如果您打开备份文件选项,WinMerge将生成.bak文件.如果您多次保存,此文件的内容将是原始左侧文件,或者倒数第二个输出文件.您可以将其关闭,或将*.bak添加到.gitignore文件中.
Git本身将在冲突解决后创建一个*.orig冲突文件,以防万一你搞砸了.同样,您可以将*.orig添加到.gitignore文件或关闭此功能.不幸的是,SourceTree没有这个GUI选项,所以启动你的git bash,或者,如果你在安装过程中选择了正确的PATH选项,那么Windows命令提示符会执行以下操作:
git config --global mergetool.keepBackup false
Run Code Online (Sandbox Code Playgroud)
这将阻止Git创建*.orig文件.您还可以通过在用户目录的根目录中找到.gitconfig文件来直接编辑配置文件.如果您知道如何使用VIM,则可以使用以下命令编辑整个内容:
git config --global --edit
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 27
Git 2.5+(2015年第二季度)将包括Winmerge作为众所周知的git mergetool!
如果Winmerge在你的身边%PATH%,那git config merge.tool winmerge就是你需要做的一切!
(它适用于比较工具也:git config diff.tool winmerge)
见提交3e4f237由大卫·阿吉拉尔(davvid),5月20日到2015年
(由合并JUNIOÇ滨野- gitster-在提交324a9f4,2015年6月1日)
的帮助下,通过:菲利普·奥克利(PhilipOakley),约翰内斯Schindelin( )dscho, 塞巴斯蒂安Schuberth( )sschuberth, SZEDERGá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作为内置工具使用此线程中描述的命令添加winmerge scriptlet ,以便用户可以使用winmerge而无需执行任何其他配置.
ell*_*eth 14
这是我的(在*%userprofile%\.gitconfig或~/.gitconfig在*nix上),没有包装(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\"
Run Code Online (Sandbox Code Playgroud)
小智 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
Run Code Online (Sandbox Code Playgroud)
我最初赞成 @CapinWinky 对于使用 SourceTree 中的 WinMerge 的回答。这个答案仍然有效,但 WinMerge 现在还支持需要额外参数的三向合并。
在 SourceTree Options 对话框中,我选择“Custom”作为合并工具,输入命令为:
C:\Program Files\WinMerge\WinMergeU.exe
Run Code Online (Sandbox Code Playgroud)
参数如下:
-u -fm -wl -wr -dl Remote_RO -dm Local_Merged -dr Base_RO $REMOTE $LOCAL $BASE -o $MERGED
Run Code Online (Sandbox Code Playgroud)
似乎没有必要将远程/本地/基本参数括在引号中来满足其中包含空格的路径。
此配置用于使用中间窗格作为合并的输出文件。
我遇到的问题是,当尝试合并时,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 '
Run Code Online (Sandbox Code Playgroud)
手动修复 .gitconfig 文件解决了问题。
你的路径不对,应该是"/c/Program Files (x86)/WinMerge/WinMergeU.exe"。
您正在 shell 脚本环境中运行,而不是本机 Windows 命令提示符。
将 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
Run Code Online (Sandbox Code Playgroud)
安装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
Run Code Online (Sandbox Code Playgroud)
因此,我编辑了该.gitconfig文件并更改了一些变量以使其适合我(我将 WinMerge 目录添加到系统路径):
[mergetool "winmerge"]
cmd = WinMergeU -e -ub -fm -wl -wr $LOCAL $BASE $REMOTE -o $MERGED -am
Run Code Online (Sandbox Code Playgroud)