回答:
はい、gitがシェルではなくグロブを展開することを確認すると、どのレベルでも一致するため、次のようなもの(引用符が重要)が正常に機能するはずです。
git diff -- '*.c' '*.h'
git diff -- *.{c,h,etc}
git diff master HEAD -- "*filename.txt"
また、便利ですgit diff master HEAD --name-only
''
)も重要です。git diff -- src/*.js
する必要がありますgit diff -- 'src/*.js'
ファイルを再帰的に含めるには(現在のディレクトリを含む)、これは私にとってはうまくいきました:
git diff -- '***.py'
git diff -- '***.py' ':!.Trashes'
(再帰的に検索した)シェルのglobstarを使用するか1 、2 :
shopt -s globstar
git diff -- *.py **/*.py
またはfindを使用します。
find -name '*.py' -print0 | xargs -0 git diff --
これらはどちらも特別な名前であり、空白を証明します。拡張子が.pyのディレクトリをフィルタリングしたいかもしれませんが:)
1私はgit diff -- {.,**}/*.py
いつもやりたい
2 globstarが有効な場合、git diff -- **/*.py
すでにが含まれています./*.py
。Bashのマンページ:「/が後に続く場合、2つの隣接する*は、ディレクトリとサブディレクトリのみに一致します。」
拡張用のコマンドライン引数。
git diff *.py
代わりに、あなたはにパイプfind
することができますgit diff
:
find . -name '*.py' -type f | git diff --
git diff *.py
叫びの見出しがあってもなくても十分だったでしょう
gitバージョン2.18.0でテストしたように、ファイル拡張子は二重引用符で囲む必要があります。ローカルリポジトリとリモートリポジトリの最後の違いを見つけたい場合は、プルした後、次のように使用できます。
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
例えば:
git diff master@{1} origin/master --name-only "*.cs"
git diff master@{1} origin/master --name-only -- "*.cs"
上記の答えのどれも、git bash
Windowsでは私にはうまくいかないようです。それがバージョンのもの(私は1.8.4を使用しています)なのかWindows / bashなのかわかりません。また、私の場合、2つのブランチを比較したいのですが、各ブランチには他のブランチには存在しない追加のファイルがありました(したがって、「検索」ベースのファイルは不要です)。
とにかくこれは私のために働きました(私の例では、pythonファイル間の差分を探しています):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
私はこれで巻きました:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
これは、ファイル名に 'test'(大文字と小文字は区別されない)という単語が含まれ、末尾がでない場合にのみ、指定されたコミットの差分を表示し.sql
、必要に応じてパイプラインを変更します。