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
不确定这是否有帮助,但这是我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中设置它,所以试试看它是否有效.
实际上,我现在使用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)
我知道这是一个老问题,我意识到我的情况可能只是我很笨,但我确实旋转了我的轮子试图解决这个问题。但希望以后不会像我一样犯同样错误的人完全迷失。
确保项目显示git diff!
我有一个非常简单的一行更改。做了一个git add .然后被打断了。回来完成并决定仔细检查差异。我没有意识到执行 agit add会阻止我使用git difftool.
做一个git reset允许git difftool工作。