任意のコミットを無視して git blame してくれるやつ。いわゆるメガコ
ミットを無視した blame をしたいときに使える。

なぜかセットアップにひどくハマったのでメモ。

セットアップ方法

  1. git clone してくる

$ git clone https://github.com/google/proto-quic.git

  1. 以下のように、パスの通ったディレクトリに git-hyper-blame という
    名前のシンボリックリンクを作る。git のサブコマンド hyper-blame が
    利用可能になる

$ ln -s ~/src/github.com/google/proto-quic/depot_tools/git_hyper_blame.py ~/bin/git-hyper-blame

※ Python は macOS Sierra 付属の /usr/bin/python (Python 2.7.10) で
動きます。pip install とかも不要です。

使い方

普通の blame はこちら。

$ git blame Gemfile
99d5ce00 (Takashi Masuda 2016-08-26 23:06:50 +0900  1) # frozen_string_literal: true
99d5ce00 (Takashi Masuda 2016-08-26 23:06:50 +0900  2)
^1039771 (Takashi Masuda 2016-07-16 13:28:00 +0900  3) source 'https://rubygems.org'
^1039771 (Takashi Masuda 2016-07-16 13:28:00 +0900  4)
d1213a45 (Takashi Masuda 2016-12-31 13:50:21 +0900  5) ruby '2.4.0'
^1039771 (Takashi Masuda 2016-07-16 13:28:00 +0900  6)

hyper-blame で d1213a45 を除外してみる。5 行目が変わった。

$ git hyper-blame -i d1213a45 Gemfile
99d5ce00 (Takashi Masuda 2016-08-26 23:06:50 +0900  1) # frozen_string_literal: true
99d5ce00 (Takashi Masuda 2016-08-26 23:06:50 +0900  2)
1039771a (Takashi Masuda 2016-07-16 13:28:00 +0900  3) source 'https://rubygems.org'
1039771a (Takashi Masuda 2016-07-16 13:28:00 +0900  4)
3f3219d1 (Takashi Masuda 2016-11-23 18:50:22 +0900 5*) ruby '2.4.0'
1039771a (Takashi Masuda 2016-07-16 13:28:00 +0900  6)

.git-blame-ignore-revs というファイルに、除外したい commit を列挙
しても同じ効果が得られる。

$ echo d1213a45 > .git-blame-ignore-revs
$ git hyper-blame Gemfile
99d5ce00 (Takashi Masuda 2016-08-26 23:06:50 +0900  1) # frozen_string_literal: true
99d5ce00 (Takashi Masuda 2016-08-26 23:06:50 +0900  2)
1039771a (Takashi Masuda 2016-07-16 13:28:00 +0900  3) source 'https://rubygems.org'
1039771a (Takashi Masuda 2016-07-16 13:28:00 +0900  4)
3f3219d1 (Takashi Masuda 2016-11-23 18:50:22 +0900 5*) ruby '2.4.0'
1039771a (Takashi Masuda 2016-07-16 13:28:00 +0900  6)

See also git-hyper-blame(1)