git diffを指定したファイル拡張子のセットに制限するには、どのオプションを使用する必要がありますか?

指定したファイル拡張子に git diff を制限するオプションはありますか?

105

8 答え

はい、gitがシェルではなくグロブを展開するようにすると、どんなレベルでも一致するので、このようなもの(引用符は重要です)は正常に動作するはずです。

git diff -- '*.c' '*.h'
154
追加された
私の場合は、 git diff - *。{c、h、etc}
追加された 著者 Matt Fletcher,
@Mat:それは私のために働く、私はgit.gitクローンでそれをテストした。
追加された 著者 CB Bailey,
それは私にとってはうまくいかないようです。
追加された 著者 Mat,
私のgitバージョンは古すぎました。 1.7.8で広告されているように動作します。優秀な。
追加された 著者 Mat,
ダブルダッシュが重要です。 git diff master HEAD - "* filename.txt" は、 git diff master HEAD --name-only
追加された 著者 neaumusic,

Either use your shell's globstar (which does a recursive search)1,2:

shopt -s globstar 
git diff -- *.py **/*.py

またはfindを使用してください:

find -name '*.py' -print0 | xargs -0 git diff --

これらは両方とも特別な名前と空白の証明です。 .py拡張子を持つディレクトリをフィルタリングしたいかもしれません:)


1 I like to do git diff -- {.,**}/*.py usually

2 When globstar is enabled, git diff -- **/*.py already includes ./*.py. In Bash's manpage: 'If followed by a /, two adjacent *s will match only directories and subdirectories.'

8
追加された

単純なファイルパターンの場合、これはうまくいくようです:

$ git ls-files -zm '*.txt' | xargs --null git diff

ホワイトスペースは安全で、複数の拡張機能を持つこともできます:

$ git ls-files -zm '*.h|*.c|*.cpp' | xargs --null git diff
1
追加された

再帰的に(現在のディレクトリを含む)ファイルをインクルードするには、これは私のために働いた:

git diff -- '***.py'
1
追加された

拡張のコマンドライン引数。

git diff *.py

代わりに、 find git diff にパイプすることができます:

find . -name '*.py' -type f | git diff --
0
追加された
答えを少しわかりやすくしてください。あなたは git diff * .py で充分満足しているかもしれません。
追加された 著者 sehe,
シェルスクリプト内の「叫ぶ見出し」は#コメントだった。
追加された 著者 hughdbrown,

git diff will only show differences in unstaged files.

私は git diff から .info ファイルを除外したいので、この質問を見つけました。これを実現するには、 git add * .info を使用します。

0
追加された

上記の答えは、Windowsの git bash の下ではうまくいかないようです。私はそれがバージョンのもの(私は1.8.4を使用している)かWindows/bashのものかどうかは分かりません。私の場合、私は、2つのブランチを分けて、それぞれのブランチが他のブランチにない追加ファイルを持っているようにしたかったのです。

とにかくこれは私のために働いていました(私の例では、pythonファイル間のdiffを探しています):

git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
0
追加された

私はこれで巻いた:

commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --

これは、ファイル名に 'test'(大文字小文字を区別しない)という単語が含まれ、 .sql で終わらない場合にのみ、指定されたコミットの差分を表示します。

0
追加された