Yanıtlar:
Evet, git'in kabuğunuzdan ziyade bir küreyi genişlettiğinden emin olursanız, herhangi bir seviyede eşleşir, böylece böyle bir şey (tırnaklar önemlidir) iyi çalışmalıdır.
git diff -- '*.c' '*.h'
git diff -- *.{c,h,etc}
git diff master HEAD -- "*filename.txt"
Ayrıca yararlıgit diff master HEAD --name-only
''
) da önemlidir! git diff -- src/*.js
olmalıgit diff -- 'src/*.js'
Dosyaları özyinelemeli olarak (geçerli dir dahil) dahil etmek benim için çalıştı:
git diff -- '***.py'
git diff -- '***.py' ':!.Trashes'
Ya kabuğunuzun globstarını kullanın (özyinelemeli arama yapar) 1 , 2 :
shopt -s globstar
git diff -- *.py **/*.py
veya find komutunu kullanın:
find -name '*.py' -print0 | xargs -0 git diff --
Bunların her ikisi de özel isimler ve boşluklara dayanıklıdır. .Py uzantılı dizinleri filtrelemek isteseniz de :)
1 git diff -- {.,**}/*.py
Genellikle yapmayı severim
2 Globstar etkinleştirildiğinde, git diff -- **/*.py
zaten içerir ./*.py
. Bash manpageinde: '/ / ile takip edilirse, bitişik iki * yalnızca dizinlerle ve alt dizinlerle eşleşir.'
Uzantı için komut satırı bağımsız değişkeni.
git diff *.py
Alternatif olarak, aşağıdakilere boru find
oluşturabilirsiniz git diff
:
find . -name '*.py' -type f | git diff --
git diff *.py
ve bağırarak başlıkları olmadan
Git sürüm 2.18.0'da test edildiği gibi, dosya uzantısı çift tırnak içine alınmalıdır. Yerel deponuzla uzak deponuz arasındaki son farkları bulmak istiyorsanız, çektikten sonra şunları kullanabilirsiniz:
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
Örneğin:
git diff master@{1} origin/master --name-only "*.cs"
git diff master@{1} origin/master --name-only -- "*.cs"
Yukarıdaki cevapların hiçbiri git bash
Windows altında benim için çalışmıyor gibi görünüyor . Bir sürüm şey (1.8.4 kullanıyorum) veya Windows / bash şey olup olmadığından emin değilim; ayrıca, benim durumumda, her dalın diğer dalda bulunmayan ek dosyaları olduğu iki dalı ayırmak istedim.
Neyse bu benim için çalıştı (benim örneğimde, python dosyaları arasında bir fark arıyor):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
git diff
yalnızca etiketlenmemiş dosyalarda farklılıklar gösterir.
Bu soruyu buldum çünkü .info
dosyaları hariç tutmak istedim git diff
. Bunu evreleme ile başardım git add *.info
, bu da kalan dosyaları azaltır.
Bununla yaralandım:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
Bu, yalnızca dosya adı 'test' (büyük / küçük harf duyarsız) kelimesini içeriyorsa ve bitmiyorsa .sql
, boru hattını durumunuz için gerektiği şekilde değiştirin.