【发布时间】:2014-06-12 21:58:16
【问题描述】:
我一直在遵循answer 中“blog entry by 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
(是的,这是 DiffMerge 的正确路径。)
我已经编辑了我的.gitconfig 文件以包含diff 和difftool 块(我直接从帖子中复制了这些行,他确实离开了注释掉的#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 并按Enter。什么都没发生。如果我做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。我不知道如何解释错误;什么命令没有找到? difftool?我在 git 中运行 1.7.11,而 difftool 应该包含在 git 中,从 1.6.3 版本开始。
当我查看错误中引用的文件的第 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 脚本一无所知,因此按照该帖子中的说明进行操作几乎是我目前知识的局限。
【问题讨论】:
-
你也安装了 Cygwin 吗?
-
博文中没有任何内容表明这是必要的。事实上,first comment 似乎表明它不是。
-
你试过最新的 2.0 msysgit "Git for Windows" 吗? github.com/msysgit/msysgit/releases
-
@VonC - 我们的 git install 中有大量配置;我对尝试在企业安装之外升级它感到紧张。假设该过程应该适用于 1.6.3 以上的任何 git 版本。另外,不确定您在哪里看到 2.0;您提供的链接显示了一个新的(可能不稳定的)1.9.4 预览版。
-
不要升级。不要碰任何东西。使用可移植的 ditrib (github.com/msysgit/msysgit/releases/download/…),这是一个可以在任何地方解压缩的存档。这样,如果新的 git 没有解决任何问题,您可以回退到当前的 git。
标签: windows git bash diffmerge