在 CodeAnywhere 和 Git - "Not Found" 消息上使用 DiffMerge

Using DiffMerge on CodeAnywhere and Git - "Not Found" Message

我已经在我的 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" 显然 运行s /usr/lib/git-core/git-mergetool在远程系统上找不到 diffmerge。我根本看不到 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

似乎是我错过了在远程安装的东西,或者是我错过了一个配置告诉它 "temp copy" 文件到我的本地然后 运行 diffmerge 在我的本地然后 return 远程文件到远程。我只是看不出在这种情况下漏掉了什么。

谢谢

感谢@nwinkler 的快速回复。如果我理解你的建议,那就是 运行在本地 Mac 上赢得一个学期,而不是 运行 在远程 运行 上赢得一个学期(运行 在Mac 意味着 diffmerge.sh 等默认情况下可用于 Mac 的任期 win 通过驱动器将其 运行 作为任期 win 开启)而,远程术语 win 将无法直接访问我的本地驱动器。如果我错了,请纠正我。

我按照你的建议做了 运行 "which diffmerge" 但它根本找不到它(没有安装在遥控器上)。

我会深入研究你的建议,看看是否有东西可以安装在遥控器上,并尝试你建议的 "installer"。

如果我 运行 从我的本地 运行ning 中 Mac 赢得它,它确实可以正常工作。

我同意它没有在遥控器上找到 diffmerge。我只是看不到那里要安装什么....

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

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

which diffmerge

如果 diffmerge 安装到您的路径中,它应该显示如下内容:

$ which diffmerge
/usr/local/bin/diffmerge

如果未安装 diffmergewhich diffmerge 命令的输出将为空。

要修复,好像有两种方法:

  1. 根据http://twobitlabs.com/2011/08/install-diffmerge-git-mac-os-x, you need to download the Diffmerge installer not the DMG from http://www.sourcegear.com/diffmerge/downloads.php。安装程序显然会安装 diffmerge.sh 脚本,以便可以从命令行使用它。
  2. 将脚本链接到您自己路径上的某个位置。为此,您首先需要找到脚本 - 默认情况下,它应该安装在 /Applications/DiffMerge.app/Contents/Resources/diffmerge.sh 中。如果它在那里,你可以 link 像这样 /usr/local/bin/diffmerge 这样的东西:

    sudo ln -s /Applications/DiffMerge.app/Contents/Resources/diffmerge.sh /usr/local/bin/diffmerge
    

    这将询问您的用户密码(sudo)。对文件进行 symlink 编辑后,您需要确保 /usr/local/bin 在您的 PATH 上。首先尝试再次 运行 which diffmerge 看看它现在是否有效。如果它不起作用,请确保将 /usr/local/bin 添加到您的 PATH 变量。

    为此,您可以编辑用户的 ~/.bash_profile 文件(使用您选择的任何文本编辑器)。添加如下一行:

    export PATH=$PATH:/usr/local/bin
    

    保存文件后,打开一个新终端 window 并再次尝试 which diffmerge