Git difftool没有启动外部DiffMerge程序

Emm*_*myS 7 windows git bash diffmerge

我一直在关注,在"方向由Dave博客条目在这个环节" 答案是我在Windows 7和做使用SourceGear的DiffMerge工具.我已将git\cmd目录添加到我的PATH系统变量并将我的git-diff-diffmerge-wrapper.sh文件放在那里:

#!/bin/sh
"C:\Program Files\SourceGear\Common\DiffMerge\sgdm.exe" "$1" "$2" | cat
Run Code Online (Sandbox Code Playgroud)

(是的,这是DiffMerge的正确路径.)

我已经编辑了我的.gitconfig文件以包含diff和difftool块(我直接从帖子中复制了行,他确实留在了注释掉的#external行.我把它添加到我文件的末尾;那可以吗?)

[diff]
    # external = git-diff-wrapper.sh
    tool = diffmerge
[difftool "diffmerge"]
    cmd = git-diff-diffmerge-wrapper.sh "$LOCAL" "$REMOTE"
Run Code Online (Sandbox Code Playgroud)

所以我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
Run Code Online (Sandbox Code Playgroud)

对于提交之间不同的所有文件,它会继续,但它永远不会启动DiffMerge.我不知道如何解释错误; 什么命令没找到?difftool?我在git中运行1.7.11,并且difftool应该包含在从1.6.3版本开始的git中.

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

( eval $merge_tool_cmd )
Run Code Online (Sandbox Code Playgroud)

作为此块的一部分:

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
}
Run Code Online (Sandbox Code Playgroud)

谁能帮我吗?我是日常用户git,但几乎不是高级用户,我对Windows shell脚本一无所知,所以遵循该帖子中的指示几乎是我的知识限制.

小智 7

DiffMerge

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

[diff]
    tool = dm
[difftool "dm"]
    cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\"
Run Code Online (Sandbox Code Playgroud)

我目前正在使用Git 2.0,但我似乎记得用Git 1.8.x或者甚至早在Git 1.7.x中设置它,所以试试看它是否有效.

超越比较3 Pro的奖金

实际上,我现在使用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\""
Run Code Online (Sandbox Code Playgroud)


TyC*_*obb 6

我知道这是一个老问题,我意识到我的情况可能只是我很笨,但我确实旋转了我的轮子试图解决这个问题。但希望以后不会像我一样犯同样错误的人完全迷失。


确保项目显示git diff!

我有一个非常简单的一行更改。做了一个git add .然后被打断了。回来完成并决定仔细检查差异。我没有意识到执行 agit add会阻止我使用git difftool.

做一个git reset允许git difftool工作。