gitのdiff-highlightを使い始めた

git log -pgit diff などで差分を見るとき、行単位での追加/削除は表示されるが、行の中のどこが変わったのかは表示してくれない。例えば行の中の一単語を書き換えただけで、しかもその行が長い場合、どこに差分があるのか目で探すのが結構大変だった。
しかし先日、 diff-highlight という便利なモジュールが提供されていることを知り、早速導入してみた。

diff-highlightとは

github.com

gitコマンドの、行単位での差分を探す動作のポストプロセスとして実行され、同じ行の中の差分をハイライトしてくれる。 例えば、行の一部分だけ変えたときの git diff は、今までこんな感じだった。

f:id:Udomomo:20191201171033p:plain

それがこうなる。差分がわかりやすい。

f:id:Udomomo:20191201171052p:plain

diff-highlightの設定

この機能は gitコマンドに同梱されているため、インストールは不要。設定作業のみで使える。
まず .gitconfig に以下を追記する。

[pager]
    log = diff-highlight | less
    show = diff-highlight | less
    diff = diff-highlight | less

ただしこの設定を有効にするには、 diff-highlight 自体にPATHを通す必要がある。
Macのhomebrewで git をインストールした場合、バージョンを更新すると diff-highlightディレクトリも変わってしまう。その場合、 git-coreシンボリックリンクに対して /usr/local/bin からさらにシンボリックリンクを貼るという方法で回避できる。

sudo ln -s /usr/local/share/git-core/contrib/diff-highlight/diff-highlight /usr/local/bin/diff-highlight

この方法は以下の記事で知った。 qiita.com

これで diff-highlight が使えるようになる。 .gitconfig に設定を加えたことで、 git loggit show コマンドでも diff-highlight が有効化されている。

また、普段 tig を使っている場合、2.2.1以降であれば .tigrc で以下の設定をすると、 tig でも diff-highlight が使えるようになる。

set diff-highlight = true