git diff
を特定のファイル拡張子セットに制限するオプションはありますか?
はい、Gitがシェルではなくグロブを展開することを確認すると、任意のレベルで一致するため、このようなもの(引用符が重要)が正常に機能するはずです。
git diff -- '*.c' '*.h'
シェルのグロブスターを使用する(再帰検索を行う)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'
拡張用のコマンドライン引数。
git diff *.py
別の方法として、find
をgit diff
にパイプすることができます:
find . -name '*.py' -type f | git diff --
単純なファイルパターンの場合、これは機能するようです。
$ git ls-files -zm '*.txt' | xargs --null git diff
空白は安全であり、複数の拡張機能を使用することもできます。
$ git ls-files -zm '*.h|*.c|*.cpp' | xargs --null git diff
私はこれで終わった:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
これは、ファイル名にWord 'test'(大文字と小文字を区別しない)が含まれ、.sql
で終わらない場合にのみ、指定したコミットの差分を表示します。必要に応じてパイプラインを変更します。
上記の回答はいずれも、git bash
Windowsの場合。それがバージョンのもの(1.8.4を使用しています)なのか、Windows/bashのものなのかわかりません。また、私の場合、各ブランチに他のブランチには存在しない追加ファイルがある2つのブランチを比較したかったのです(したがって、「検索」ベースのファイルはありません)。
とにかくこれは私のために働いた(私の例では、python files)間の差分を探している:
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
git diff
は、ステージングされていないファイルの違いのみを表示します。
.info
ファイルをgit diff
から除外したかったため、この質問を見つけました。 git add *.info
でステージングすることでこれを達成し、残っているファイルを減らしました。
Gitバージョン2.18.0でテストしたように、二重引用符の間にファイル拡張子を記述する必要があります。ローカルリポジトリとリモートリポジトリの最後の違いを見つけたい場合は、プルした後、次のように書くことができます:
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
例えば:
git diff master@{1} Origin/master --name-only "*.cs"