LoginSignup
37
34

More than 5 years have passed since last update.

git diff で特定のファイル、ディレクトリを除外したい

Posted at

自動生成されたファイルなど、diff で無視したいケースはままあると思う。

diff(1) だと --exclude(-x) でそれができる。

トピックブランチで比較的大きな変更をしていて、特定ディレクトリ以下にしか差分がないことを確認したかったんだけど、git-diff にはそういったオプションが無いらしい。

調べてみると filterdiff がよさそうだった。git-diff 以外にも patch ファイルとかにも使えるしね。

インストール

filterdiff は patchutils に含まれる。
HomeBrew なら

brew install patchutils

ついでに colordiff も入れておく

brew install colordiff

使ってみた

git diff develop..master | filterdiff -p1 -x 'app/*'

-x で無視したいファイル/ディレクトリを指定している。gitignore みたいなワイルドカード指定もできる。

-p1 は PATH の頭を削るためのおまじない。a/, b/ を削っている。

diff --git a/.gitignore b/.gitignore
index 887682e..abfd4a4 100644
--- a/.gitignore
+++ b/.gitignore

ちょっと味気ないよね

そのままだとハイライトされなくて寂しいので colordiff を組み合わせる:

git diff develop..master | filterdiff -p1 -x 'app/*' | colordiff

less 通したいなぁ

流れてしまってスクロールさせるのめんどくさいよね。
そのまま less に渡すと白黒に戻ってしまうから -R オプションを渡す。
ついでに、-X で、git diff のようにページャを閉じても、最後の表示がコンソールに残るようになる。

git diff develop..master | filterdiff -p1 -x 'app/*' | colordiff | less -RX
37
34
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
34