Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
OrganizationAdvent CalendarQiitadon (β)
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

自動生成されたファイルなど、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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away