Risposte:
Sì, se ti assicuri che git espanda un glob piuttosto che la tua shell, allora corrisponderà a qualsiasi livello, quindi qualcosa del genere (le virgolette sono importanti) dovrebbe funzionare bene.
git diff -- '*.c' '*.h'
git diff -- *.{c,h,etc}
git diff master HEAD -- "*filename.txt"
utile anche lagit diff master HEAD --name-only
''
) sono importanti! git diff -- src/*.js
dovrebbe esseregit diff -- 'src/*.js'
Per includere i file in modo ricorsivo (inclusa la directory corrente), questo ha funzionato per me:
git diff -- '***.py'
git diff -- '***.py' ':!.Trashes'
Utilizza la globstar della shell (che esegue una ricerca ricorsiva) 1 , 2 :
shopt -s globstar
git diff -- *.py **/*.py
o usa trova:
find -name '*.py' -print0 | xargs -0 git diff --
Entrambi sono nomi speciali e a prova di spazi bianchi. Anche se potresti voler filtrare le directory con l'estensione .py :)
1 Mi piace fare di git diff -- {.,**}/*.py
solito
2 Quando globstar è abilitato, git diff -- **/*.py
include già ./*.py
. Nella manpage di Bash: "Se seguito da un /, due * adiacenti corrisponderanno solo alle directory e alle sottodirectory".
Argomento della riga di comando per l'estensione.
git diff *.py
In alternativa, puoi eseguire il pipe find
in git diff
:
find . -name '*.py' -type f | git diff --
git diff *.py
e senza i titoli delle urla
Come testato sulla versione 2.18.0 di git, l'estensione del file deve essere citata tra virgolette doppie. Se vuoi trovare le ultime differenze tra il tuo repository locale e quello remoto, dopo averlo estratto, puoi usare:
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
Per esempio:
git diff master@{1} origin/master --name-only "*.cs"
git diff master@{1} origin/master --name-only -- "*.cs"
Nessuna delle risposte sopra sembra funzionare git bash
su Windows. Non sono sicuro che si tratti di una versione (sto usando 1.8.4) o Windows / bash; inoltre, nel mio caso, volevo diffondere due rami in cui ogni ramo aveva file aggiuntivi non presenti nell'altro ramo (quindi quelli basati su 'trova' sono remissivi).
Comunque questo ha funzionato per me (nel mio esempio, cercando un diff tra i file Python):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
git diff
mostrerà solo differenze nei file non messi in scena.
Ho trovato questa domanda perché volevo escludere i .info
file da git diff
. Ho raggiunto questo con la messa in scena con git add *.info
, che riduce i file rimasti.
Ho finito con questo:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
Ciò mostra le differenze per il commit specificato solo se il nome file contiene la parola 'test' (senza distinzione tra maiuscole e minuscole) e non termina con .sql
, modifica la pipeline secondo necessità per il tuo caso.