-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

ありがとう

追加されたコメント:

CodeAnywhere サーバーなどのリモート サーバーに接続されている SSH ターミナルがあり、「git mergetool」を実行すると、リモート システムで diffmerge が見つからない /usr/lib/git-core/git-mergetool が実行されるようです。 . 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 で用語勝利を実行することです (Mac で実行すると、デフォルトで diffmerge.sh などが Mac の用語で利用可能になります)。ターム win として実行されているドライブを介して勝つ) 一方、リモートのターム win はローカル ドライブに直接アクセスできません。私が間違っている場合は、私を修正してください。

あなたが提案したように「どのdiffmerge」を実行しましたが、まったく見つかりません(リモートにインストールされていません)。

あなたの提案を詳しく調べて、リモートにインストールするものがあるかどうかを確認し、提案された「インストーラー」も試します。

ローカル Mac から実行している term win から実行すると、正しく動作します。

リモートでdiffmergeが見つからないことに同意します。そこに何がインストールされているのかわかりません....

ありがとう、調査を続け、あなたの提案をさらに試してください。

4

1 に答える 1

4

問題は、diffmerge実行可能ファイルが$PATH. diffmerge端末に次のように入力すると、が見つかるかどうかが表示されます。

which diffmerge

がパスにインストールされている場合diffmergeは、次のように表示されます。

$ which diffmerge
/usr/local/bin/diffmerge

diffmergeがインストールされていない場合、which diffmergeコマンドの出力は空になります。

修正するには、次の 2 つの方法があるようです。

  1. http://twobitlabs.com/2011/08/install-diffmerge-git-mac-os-xによると、 http ://www.sourcegear.com/diffmerge/downloadsからDMGではなくDiffmergeインストーラーをダウンロードする必要があります。 .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/binPATH. 最初にもう一度実行which diffmergeして、現在動作するかどうかを確認してください。うまくいかない場合は、必ず変数に追加/usr/local/binしてください。PATH

    これを行うには、ユーザーの~/.bash_profileファイルを (任意のテキスト エディターで) 編集できます。次のような行を追加します。

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

    ファイルを保存したら、新しいターミナル ウィンドウを開いて、もう一度which diffmergeやり直してください。

于 2015-09-03T06:56:43.890 に答える