11

Mac で IntelliJ を diff および mergetool として構成しましたが、git がそれを起動します。コマンド ラインは、diff が完了するのを待つのではなく、常にすぐに戻ります。これは、実行された変更がディスクに反映されていないことを意味します。

私の構成は次のとおりです。

[mergetool "intellij"]
    cmd = /Applications/IntelliJ\\ IDEA\\ 13\\ CE.app/Contents/MacOS/idea merge \
          $(cd $(dirname \"$LOCAL\") && pwd)/$(basename \"$LOCAL\") \
          $(cd $(dirname \"$REMOTE\") && pwd)/$(basename \"$REMOTE\") \
          $(cd $(dirname \"$BASE\") && pwd)/$(basename \"$BASE\") 
          $(cd $(dirname \"$MERGED\") && pwd)/$(basename \"$MERGED\")
    trustExitCode = true

gitなしで手動でIntelliJを呼び出すことをテストしましたが、すぐに返されるので、これはgitの呼び出しが原因ではなく、IntelliJコマンドライン呼び出しがウィンドウを開くメッセージを既存の実行中のインスタンスに送信するだけだと思いますIntelliJ..これを機能させるために、IntelliJ が新しいインスタンスを返さない、または生成しないようにするオプションはありますか?

4

2 に答える 2

3

それを行う方法はありません。次の 3 つの回避策があります。

  1. difftool を使用する前に、既存のアプリケーションを閉じてください。他に開いているウィンドウがない場合、mergetool は正しく機能します。

  2. 別のキャッシュと構成ホームで IntelliJ の 2 番目のインスタンスを使用するただし、2 番目のインスタンスのライセンスには注意してください。たとえば、ライセンス サーバーを使用する場合、両方のインスタンスがサーバーからライセンスを取得します。

  3. 起動スクリプトに一時停止 (Windows の場合) などを追加します。そのため、git は BAT ファイル (Windows の場合) を呼び出し、この BAT ファイルは IntelliJ を呼び出して入力を待ちます。必要なことをすべて実行したら、コンソールに戻って任意のキーを手動で押す必要があります。

于 2014-11-28T14:55:30.827 に答える
2

これで動作します。

アクション「Create Command-line launcher...」を実行して、起動スクリプトを作成します (私にとっては /usr/local/bin/idea です)。

.gitconfig で:

[mergetool "idea"]
  cmd = idea merge \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
  trustExitCode = true

difftool についても同様

[difftool "idea"]
  cmd = idea diff \"$LOCAL\" \"$REMOTE\"

(バグのため、しばらく前にコマンドライン ランチャーを作成し、その間に Intellij を更新した場合は、コマンドライン ランチャーを更新する必要がある場合があります。)

于 2020-07-07T19:44:59.353 に答える