我在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
文件来包含diff
和difftool
块(我直接从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中运行difftool
, difftool
被认为包含在从版本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脚本一无所知,所以按照这篇文章中的说明,这几乎是我所知道的极限。
不知道这是否有帮助,但这是我的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来设置它,所以试试看看它是否工作。
实际上,我现在使用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 。
2)在Git Bash窗口中键入pwd
,它将显示你当前的工作目录。 右键单击窗口标题并选择标记 。 使用鼠标选择路径(在我的情况下,它是/C/Users/lpiepiora/cmds
然后按Enter键 。
3)现在编辑你的.gitconfig
并添加复制的路径(你必须在复制的路径末尾添加一个额外的斜线)。
完成这些步骤后,您应该能够启动您的合并工具。
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的东西,这就是我需要使其工作。 不需要包装脚本或本地远程变量。