Msys Git Merge工具命令选项问题

时间:2009-03-11 20:34:55

标签: git version-control merge batch-file

我正在使用msys Git在Windows计算机上进行源代码管理,而我正试图弄清楚如何让我的合并工具WinMerge与Git一起使用。

我尽我所能跟随the instructions on this blog,因为它是我发现的最接近我正在尝试做的事情。基本上我做的是:

修改我的.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的合并文档,但我似乎找不到任何与我想要做的事情有关的事情。我的猜测是解决方案将是以下之一:

  1. 更改$LOCAL& $REMOTE个变量到正确的值,假设为$LOCAL& $REMOTE不正确。
  2. 编写一个.bat脚本来调用WinMergeU,并处理Git在我的.bat脚本逻辑中发送给合并工具的参数。

3 个答案:

答案 0 :(得分:12)

如果您查看存在冲突的文件,您会注意到标准的Theirs >>>>>>><<<<<< Mine标记。 WinMerge将这些理解为合并冲突,因此不需要明确指定'他们'和'我的';只需要告诉它哪个文件有冲突标记。

  1. 我们知道工作目录中的文件包含标记。
  2. 我们合并的文件也是这个文件是有意义的 - 我们也知道git mergetool使$MERGED变量可用于命名该文件。

    [mergetool "winmerge"]
        cmd = 'C:/Program Files/WinMerge/WinMergeU.exe' \"$MERGED\"
    
  3. 这就是你需要将git与WinMerge挂钩以进行合并/冲突解决;不需要脚本或命令行开关。请参阅docs中的第3个命令行表单(由上面的OP链接)和conflictfile参数的说明。

答案 1 :(得分:7)

来自WinMerge Command line manual

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 answer中所述。

提取适应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"
  

如果您有其他工具(kdiff3P4Diff,...),请创建另一个shell脚本和相应的mergetool.myMergeTool.cmd配置指令。
  然后,您可以使用merge.tool配置轻松切换工具。

答案 2 :(得分:5)

[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 ......