我在Windows机器上使用msys Git进行源代码控制,我正在试图弄清楚如何让我的合并工具WinMerge与Git一起工作.
我已经按照我的能力尽可能地遵循了这个博客上的说明,因为它是我发现的最接近我正在尝试做的事情.基本上我做的是:
修改我的.gitconfig
文件以包含以下内容:
[merge] tool = winmerge [mergetool "winmerge"] cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" "$PWD/$LOCAL" "$PWD/$REMOTE" "$PWD/$MERGED" trustExitCode = false keepBackup = false
这几乎正常.当我尝试从Git运行合并工具时,WinMerge给我一个错误,说它无法找到文件的路径,这是完全合理的,因为它正在寻找的路径是:
C:\MY\WORKING\DIRECTORY\-e C:\MY\WORKING\DIRECTORY\-ub
看起来Git正在将选项传递给合并工具,而不是本地和远程文件名,如果一切正常,我希望传递这些文件名.
我在网上搜索了Git的合并文档,但我似乎找不到任何与我想要做的事情有关的事情.我的猜测是解决方案将是以下之一:
将$LOCAL
&$REMOTE
变量更改为正确的值,假设$LOCAL
&$REMOTE
不正确.
编写一个.bat
脚本来调用WinMergeU,并处理Git在我的.bat
脚本逻辑中发送给合并工具的参数.
Darren Bisho.. 12
如果查看存在冲突的文件,您会注意到标准Theirs >>>>>>>
和<<<<<< Mine
标记.WinMerge将这些理解为合并冲突,因此不需要明确指定'他们'和'我的'; 只需要告诉它哪个文件有冲突标记.
我们知道工作目录中的文件包含标记.
有意义的是,我们合并的文件也将是这个文件 - 我们也知道这git mergetool
使得$MERGED
变量可用于命名该文件.
[mergetool "winmerge"] cmd = 'C:/Program Files/WinMerge/WinMergeU.exe' \"$MERGED\"
这就是你需要用WinMerge挂钩以进行合并/冲突解决; 不需要脚本或命令行开关.请参阅docs中的第3个命令行表单(由上面的OP链接)和conflictfile
参数说明.
如果查看存在冲突的文件,您会注意到标准Theirs >>>>>>>
和<<<<<< Mine
标记.WinMerge将这些理解为合并冲突,因此不需要明确指定'他们'和'我的'; 只需要告诉它哪个文件有冲突标记.
我们知道工作目录中的文件包含标记.
有意义的是,我们合并的文件也将是这个文件 - 我们也知道这git mergetool
使得$MERGED
变量可用于命名该文件.
[mergetool "winmerge"] cmd = 'C:/Program Files/WinMerge/WinMergeU.exe' \"$MERGED\"
这就是你需要用WinMerge挂钩以进行合并/冲突解决; 不需要脚本或命令行开关.请参阅docs中的第3个命令行表单(由上面的OP链接)和conflictfile
参数说明.
从WinMerge命令行手册:
cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe /ub /e \" cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe /u /e \"
(/ u是带有最新WinMerge的新/ ub)
可能更适合作为mergetool部分中的命令.
但是,您可能必须将此调用包装在脚本中,如此SO答案中所述.
提取物适用于merge.tool
:
mergetool
使用自定义diff
工具进行配置的实际案例:
C:\myGitRepo>git config --global merge.tool winmerge C:\myGitRepo>git config --global mergetool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\"" C:\myGitRepo>git config --global mergetool.prompt false
随着winmerge.sh
存储在您的目录部分PATH
:
#!/bin/sh echo Launching WinMergeU.exe: $1 $2 "C:/Program Files/WinMerge/WinMergeU.exe" -e -ub "$1" "$2"
如果您有其他工具(
kdiff3
,P4Diff
...),请创建另一个shell脚本和相应的mergetool.myMergeTool.cmd
config指令.
然后,您可以使用merge.tool
配置轻松切换工具.
[mergetool "winmerge"] cmd = winmergeu -e -ub -wl -dl "Remote" -dr "Local" "$PWD/$REMOTE" "$PWD/$LOCAL" "$PWD/$MERGED" keepBackup = false
如果你看一下C:\Program Files\Git\share\git-gui\lib\mergetool.tcl
它有常见的合并工具的语法.
我还在试图弄清楚如何直接从Git GUI调用mergetool ...