我已经在我的Mac上安装了DiffMerge并配置了git以按照他们的说明使用它并且效果很好。
http://twobitlabs.com/2011/08/install-diffmerge-git-mac-os-x/#comment-140648
Hit return to start merge resolution tool (diffmerge):
/usr/lib/git-core/git-mergetool: 1: eval: diffmerge: not found
merge of app/Http/Controllers/WizardController.php failed
有什么想法吗?是否需要不同的配置或什么......?
我跑的配置是:
git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd 'diffmerge "$LOCAL" "$REMOTE"'
git config --global merge.tool diffmerge
git config --global mergetool.diffmerge.cmd 'diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"'
git config --global mergetool.diffmerge.trustExitCode true
我运行的命令(当要解决的git冲突时)是:
git mergetool
由于
添加评论:
当我将SSH终端连接到远程服务器(例如CodeAnywhere服务器)并且运行“git mergetool”时,它显然然后运行/ usr / lib / git-core / git-mergetool,它没有找到diffmerge on远程系统。我根本没看到diffmerge在遥控器上实际安装了什么东西。
这是与diffmerge相关的git配置部分:
diff.tool=diffmerge
difftool.diffmerge.cmd=diffmerge "$LOCAL" "$REMOTE"
merge.tool=diffmerge
mergetool.diffmerge.cmd=diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"
mergetool.diffmerge.trustexitcode=true
看起来这是git用来运行diffmerge的实际命令:
mergetool.diffmerge.cmd=diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"
抛出错误的文件是/ usr / lib / git-core / git-mergetool我在该文件中追溯到这一行,显然是从命令行运行上面的命令而没有在远程上找到diffmerge机器因为它没有安装在远程机器上,因为它安装在我的本地机器上:
if ! run_merge_tool "$merge_tool" "$present"
then
echo "merge of $MERGED failed" 1>&2
mv -- "$BACKUP" "$MERGED"
if test "$merge_keep_temporaries" = "false"
then
cleanup_temp_files
fi
return 1
fi
似乎有一些我错过了在遥控器上安装的东西,或者有一个我错过的配置告诉它“临时复制”文件到我的本地然后在我的本地运行diffmerge然后返回远程文件到遥控器。我只是看不出在这种情况下错过了哪一个。
由于
感谢@nwinkler的快速回复。如果我理解你的建议是在本地Mac上运行一个术语胜利,而不是在遥控器上运行一个术语胜利(在Mac上运行它意味着默认情况下,diffmerge.sh等可用于Mac的术语通过驱动器赢得它作为一个术语赢得的运行)而远程获胜将无法直接访问我的本地驱动器。如果我错了,请纠正我。
我按照你的建议运行了“哪个diffmerge”,它根本找不到它(没有安装在遥控器上)。
我会更深入地了解您的建议,看看是否有东西需要安装在遥控器上,并尝试使用“安装程序”。
如果我从一个从我的本地Mac运行的术语win中运行它,它确实可以正常工作。
我同意它并没有在遥控器上找到diffmerge。我只是看不到要安装的东西....
谢谢,继续研究并进一步尝试你的建议。
答案 0 :(得分:2)
问题似乎是diffmerge
可执行文件不在$PATH
上。如果您在终端中键入以下内容,则应显示是否可以找到diffmerge
:
which diffmerge
如果您的路径中安装了diffmerge
,则应显示如下内容:
$ which diffmerge
/usr/local/bin/diffmerge
如果未安装diffmerge
,则which diffmerge
命令的输出将为空。
要修复,似乎有两种方式:
diffmerge.sh
脚本,以便可以从命令行使用它。自己将脚本链接到路径上的某个位置。为此,您首先需要找到该脚本 - 默认情况下,它应该安装在/Applications/DiffMerge.app/Contents/Resources/diffmerge.sh
中。如果它在那里,你可以将它链接到/usr/local/bin/diffmerge
这样的东西:
sudo ln -s /Applications/DiffMerge.app/Contents/Resources/diffmerge.sh /usr/local/bin/diffmerge
这将询问您的用户密码(sudo
)。在对文件进行符号链接后,您需要确保/usr/local/bin
上有PATH
。首先尝试再次运行which diffmerge
以查看它现在是否有效。如果它不起作用,请确保将/usr/local/bin
添加到您的PATH
变量。
为此,您可以编辑用户的~/.bash_profile
文件(使用您选择的任何文本编辑器)。添加如下所示的行:
export PATH=$PATH:/usr/local/bin
保存文件后,打开新的终端窗口并再次尝试which diffmerge
。