interprism's blog

インタープリズム株式会社の開発者ブログです。

IntelliJ IDEA を git-difftool で使う

要点

以下の感じの Git 設定を追加して

[difftool "idea"]
    cmd = /Applications/IntelliJ\\ IDEA\\ CE.app/Contents/MacOS/idea diff nosplash dontReopenProjects disableNonBundledPlugins $LOCAL $REMOTE
[difftool "ideafg"]
    cmd = /Applications/IntelliJ\\ IDEA\\ CE.app/Contents/MacOS/idea diff $LOCAL $REMOTE
  • IDEA を起動せずに git difftool -d -t idea
  • IDEA が起動中なら git difftool -d -t ideafg

git-difftool-idea
git-difftool-idea

周辺情報

Git 設定のバリエーション

  • 実行ファイル idea のパス:

    OS, IDEA Ultimate/Community版のどちらか等で変化します1 2. この記事の動作環境は, macOS Big Sur 11.2.3, IntelliJ IDEA 2021.1.1 Community Edition. 環境によって存在し得る, 別のカスタム起動スクリプト(python?) /usr/local/bin/idea と取り違えると, この記事の設定では動作しません.

  • より柔軟な設定:

    この記事はシンプルな設定を採用しましたが, Git の設定次第でより柔軟な動作が可能です3 4. シェルスクリプトが使えるので IDEA に依存しなければ大体可能なのかもしれません.

Git Difftool コマンドオプション

  • -d:

    ディレクトリ(複数ファイルを一度に)比較します. このオプションがない場合, 差分が存在するファイル名が逐次的に $LOCAL, $REMOTE に渡され, その回数分 IDEA の起動と停止を繰り返して差分表示します.

  • -t:

    使用する difftool 名を指定します. diff.tool, diff.guitool 設定を併用して -t なしの実行も可能ですが, -g オプション有無と他の difftool との使い分けを考慮してこの形に落ち着きました.

課題

  • 複数の diff 画面を開けない:

    簡単な方法が見つけられませんでした. IDEA の制限なのか複数の IDEA プロセスを起動すると大抵エラーになります. 従ってこの記事では, IDEA を起動しないままか, 単一の IDEA プロセスが起動した状態で, diff 画面を開きます.

  • 比較する時点の表示が分かりにくい:

    $LOCAL, $REMOTE の内容, git difftool の一時的な仮ディレクトリ名をそのまま表示します. 何と何の比較なのか分かりにくいですが, 脳内補完お願いします.

お気持ち

私は普段 CUI の git-client を使いますが, まとまった差分を GUI で表示する機会が最近増えています. 何度も見るなら, 見た目が良さげな IntelliJ IDEA の diff 画面が良い! と思い今回の投稿となりました. 過去の ある案件で標準ツールが IDEA になって自分が慣れずに作業効率悪かったので idea format コマンドだけ拝借してこっそり Vim で開発した 経験を下敷きにしています.

JetBrains はとても良いものを作ってくれました.

社員番号b082

PAGE TOP