在CodeAnywhere和Git上使用DiffMerge - “未找到”消息

时间:2015-09-02 19:02:58

标签: git macos diffmerge

我已经在我的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。我只是看不到要安装的东西....

谢谢,继续研究并进一步尝试你的建议。

1 个答案:

答案 0 :(得分:2)

问题似乎是diffmerge可执行文件不在$PATH上。如果您在终端中键入以下内容,则应显示是否可以找到diffmerge

which diffmerge

如果您的路径中安装了diffmerge,则应显示如下内容:

$ which diffmerge
/usr/local/bin/diffmerge

如果未安装diffmerge,则which diffmerge命令的输出将为空。

要修复,似乎有两种方式:

  1. 根据http://twobitlabs.com/2011/08/install-diffmerge-git-mac-os-x,您需要从http://www.sourcegear.com/diffmerge/downloads.php下载Diffmerge 安装程序而不是 DMG 。安装程序显然会安装diffmerge.sh脚本,以便可以从命令行使用它。
  2. 自己将脚本链接到路径上的某个位置。为此,您首先需要找到该脚本 - 默认情况下,它应该安装在/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