Gitでコメントを無視して差分を見る

古いRubyのコードのコメントを独自のRDoc形式からYARD形式に変換して、さらにその後にプログラムを変更したんですが、その後に差分を見ると大量のコメントの差分が表示されて、実際のコードの差分が何かわからなくなったりしたので、コメントを無視して差分を取る方法を調べてみました。

普通にgit diffするとこんな感じ:

diff --git a/hoge.rb b/hoge.rb
index 8fa6659..0561977 100644
--- a/hoge.rb
+++ b/hoge.rb
@@ -1,8 +1,8 @@
-# == ほげクラス
+# ほげクラス
 class Hoge
-  # === ほげ
-  # +str+ 何か
+  # ほげ
+  # @param str [String] 何か
   def hoge(str)
-    123
+    456
   end
 end

プログラムとしての変更部分は1行だけなのですが、コメントの差分がたくさん出てきて見にくいです。 Git の attribute を使ってコメントの変更を無視するようにしてみます。参考: Git のカスタマイズ - Git の属性

まず引数で指定されたファイルのコメント行を削除して出力するコマンドを作成します:

#!/bin/sh
sed -e '/^ *#/d' "$@"

git config で上のコマンドを登録:

git config diff.ignore-comment.textconv /tmp/delete-comment

.gitattributes ファイルにファイル名パターンと差分にignore-commentを使用するように登録:

*.rb diff=ignore-comment

以上を設定した状態で差分を取ってみます:

diff --git a/hoge.rb b/hoge.rb
index 8fa6659..0561977 100644
--- a/hoge.rb
+++ b/hoge.rb
@@ -1,5 +1,5 @@
 class Hoge
   def hoge(str)
-    123
+    456
   end
 end

コメント行の差分が無視されました。パチパチ。🎉

一時的に確認するためだけに設定しただけなので、確認したら .gitattributes を元に戻しておきます。

もっといい方法があるかもしれませんが、一応目的は達成できたので良しということで。