Git difftool不启动外部DiffMerge程序

我在Windows 7上一直遵循这个答案的“ Dave博客条目 ”链接,并使用SourceGear的DiffMerge工具。 我已经将git\cmd目录添加到我的PATH系统variables中,并将我的git-diff-diffmerge-wrapper.sh文件放在那里:

 #!/bin/sh "C:\Program Files\SourceGear\Common\DiffMerge\sgdm.exe" "$1" "$2" | cat 

(是的,这是DiffMerge的正确path。)

我已经编辑了我的.gitconfig文件来包含diffdifftool块(我直接从post中复制了这些行,并且在注释掉的#external行中留下了,我把它添加到了我的文件的末尾;好? )

 [diff] # external = git-diff-wrapper.sh tool = diffmerge [difftool "diffmerge"] cmd = git-diff-diffmerge-wrapper.sh "$LOCAL" "$REMOTE" 

所以我去git bash并做git difftool HEAD~ 67b8679 -- js/site/pizzabuilder.js并按回车。 什么都没发生。 如果我做git difftool HEAD~ 67b8679 ,离开我想要的文件,我得到这个:

 Viewing: 'js/angular/hutlovers/hutlovers.js' Launch 'diffmerge' [Y/n]: Y C:\Program Files (x86)\Git/libexec/git-core/mergetools/defaults: line 17: git-diff-diffmerge-wrapper.sh: command not found Viewing: 'js/angular/localization/StoreListCtrl.js' Launch 'diffmerge' [Y/n]: n Viewing: 'js/pizzahut/site/browser_version.js' Launch 'diffmerge' [Y/n]: n Viewing: 'js/pizzahut/site/dashboard.js' Launch 'diffmerge' [Y/n]: n 

它继续提交之间的所有不同的文件,但它永远不会启动DiffMerge。 我不知道如何解释错误。 什么命令没有find? difftool ? 我在git中运行difftooldifftool被认为包含在从版本1.6.3开始的git中。

当我查看错误中引用的文件的第17行时,这里是:

 ( eval $merge_tool_cmd ) 

作为这个块的一部分:

 diff_cmd () { merge_tool_cmd="$(get_merge_tool_cmd "$1")" if test -z "$merge_tool_cmd" then status=1 break fi ( eval $merge_tool_cmd ) status=$? return $status } 

谁能帮我吗? 我是git的日常用户,但几乎不是高级用户,而且我对Windows shell脚本一无所知,所以按照这篇文章中的说明,这几乎是我所知道的极限。

DiffMerge

不知道这是否有帮助,但这是我的difftool与DiffMerge的配置。 请注意,我正在使用msysgit Bash (不知道Cygwin或PoshGit用户是否会有所不同):

 [diff] tool = dm [difftool "dm"] cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\" 

我目前正在使用Git 2.0,但是我似乎记得已经用Git 1.8.x或者甚至早于Git 1.7.x来设置它,所以试试看看它是否工作。

超越比较3赞成

实际上,我现在使用Beyond Compare 3 Pro在Windows上做了大部分的比较 ,尽管有时我仍然会使用DiffMerge。 这里是我所有的difftool设置,如果你想开关:

 [merge] tool = bc3 [diff] tool = bc3 [difftool "dm"] cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\" [difftool "bc3"] cmd = "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\"" [mergetool "bc3"] cmd = "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"" 

在我看来,问题是git bash使用的路径不是Windows正在使用的路径。 我通过运行env | grep PATH检查 从git bash中的 env | grep PATH

我明白你不想混乱的git安装,所以我建议你给你的包装完整的路径。

你必须使用cygwin格式。 怎么做?

1)去那里你有包装的地方,并在那里运行Git Bash

步骤1

2)在Git Bash窗口中键入pwd ,它将显示你当前的工作目录。 右键单击窗口标题并选择标记 。 使用鼠标选择路径(在我的情况下,它是/C/Users/lpiepiora/cmds然后按Enter键

第2步

3)现在编辑你的.gitconfig并添加复制的路径(你必须在复制的路径末尾添加一个额外的斜线)。

第3步

完成这些步骤后,您应该能够启动您的合并工具。

PS。 你可能想要改变你的git-diff-diffmerge-wrapper.sh这些行,以处理正确删除/添加的文件,正如它在另一个问题的答案中所建议的。

 #!/bin/sh NULL="/dev/null" if [ "$2" = "$NULL" ] ; then echo "removed: $1" elif [ "$1" = "$NULL" ] ; then echo "added: $2" else echo "changed: $3" "C:\Program Files\SourceGear\Common\DiffMerge\sgdm.exe" "$1" "$2" | cat fi 

没有其他答案为我工作。 我终于得到diffmerge使用Git 2.6.3,2.7.0在Windows 7,8,10上工作

1)确保你可以写入和使用你的全局.gitconfig存储在〜/ .gitconfig,这是相对于你的HOME路径。

使用:

 git config --global --edit 

或者只是导航到Windows资源管理器中的文件,并以这种方式进行编辑。

HOME变量可以通过导航到Windows环境变量来设置(对于7,右键单击计算机 – >属性 – >高级系统设置 – >环境变量)。

2)确保diffmerge在你的机器上的PATH变量中。 这和HOME变量在同一个地方。 我把这个添加到我的路径中:

 C:\Program Files\SourceGear\Common\DiffMerge; 

3)为了使diffmerge默认添加以下到您的全局.gitconfig文件:

 [merge] tool = diffmerge [mergetool] prompt = true [mergetool "diffmerge"] path = C:\\Program Files\\SourceGear\\Common\\DiffMerge\\sgdm.exe 

'\'是一个转义字符

重复difftool的东西,这就是我需要使其工作。 不需要包装脚本或本地远程变量。