-2

我已经在我的 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 . 我根本看不到 diffmerge 在哪里实际安装了遥控器上的任何东西。

这是与 diffmerge 相关的 git config 部分:

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 上运行术语 win,而不是在远程上运行术语 win(在 Mac 上运行意味着 diffmerge.sh 等默认情况下可用于 Mac 的术语通过驱动器赢取它作为术语赢运行),而远程术语赢将无法直接访问我的本地驱动器。如果我错了,请纠正我。

我确实按照您的建议运行了“which diffmerge”,但根本找不到它(未安装在遥控器上)。

我会更深入地研究您的建议,看看是否要在遥控器上安装一些东西,并尝试您建议的“安装程序”。

如果我从本地 Mac 上运行的术语 win 运行它,它确实可以正常工作。

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

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

4

1 回答 1

4

问题似乎是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下载 Diffmerge安装程序而不是DMG .php _ 安装程序显然会安装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

于 2015-09-03T06:56:43.890 回答