要点
以下の感じの 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 設定のバリエーション
実行ファイル
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 はとても良いものを作ってくれました.