Jawaban:
Ya, jika Anda memastikan bahwa git memperluas bola daripada shell Anda maka itu akan cocok pada tingkat apa pun sehingga sesuatu seperti ini (kutipan penting) harus bekerja dengan baik.
git diff -- '*.c' '*.h'
git diff -- *.{c,h,etc}
git diff master HEAD -- "*filename.txt"
juga berguna adalahgit diff master HEAD --name-only
''
) juga penting! git diff -- src/*.js
seharusnyagit diff -- 'src/*.js'
Untuk memasukkan file secara rekursif (termasuk direktori saat ini) ini berhasil bagi saya:
git diff -- '***.py'
git diff -- '***.py' ':!.Trashes'
Gunakan globstar shell Anda (yang melakukan pencarian rekursif) 1 , 2 :
shopt -s globstar
git diff -- *.py **/*.py
atau gunakan find:
find -name '*.py' -print0 | xargs -0 git diff --
Keduanya adalah nama-khusus dan bukti spasi putih. Meskipun Anda mungkin ingin memfilter untuk direktori yang memiliki ekstensi .py :)
1 Saya suka melakukan git diff -- {.,**}/*.py
biasanya
2 Ketika globstar diaktifkan, git diff -- **/*.py
sudah termasuk ./*.py
. Di manual Bash: 'Jika diikuti oleh a /, dua * yang berdekatan hanya akan cocok dengan direktori dan subdirektori.'
Argumen baris perintah untuk ekstensi.
git diff *.py
Sebagai alternatif, Anda dapat menyalurkan find
ke git diff
:
find . -name '*.py' -type f | git diff --
git diff *.py
dan tanpa judul berteriak
Seperti yang diuji pada git versi 2.18.0, ekstensi file harus dikutip dengan tanda kutip ganda. Jika Anda ingin menemukan perbedaan terakhir antara repositori lokal Anda dan yang jauh, setelah menarik, Anda dapat menggunakan:
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
Sebagai contoh:
git diff master@{1} origin/master --name-only "*.cs"
git diff master@{1} origin/master --name-only -- "*.cs"
Tidak ada satu pun jawaban di atas yang berfungsi untuk saya git bash
di Windows. Saya tidak yakin apakah itu versi (saya menggunakan 1.8.4) atau Windows / bash; juga, dalam kasus saya, saya ingin membedakan dua cabang di mana setiap cabang memiliki file tambahan yang tidak ada di cabang lain (sehingga yang berbasis 'menemukan' lalai).
Bagaimanapun ini bekerja untuk saya (dalam contoh saya, mencari perbedaan antara file python):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
git diff
hanya akan menunjukkan perbedaan pada file yang tidak dipentaskan.
Saya menemukan pertanyaan ini karena saya ingin mengecualikan .info
file dari git diff
. Saya mencapai ini dengan mementaskannya git add *.info
, yang mengurangi file yang tersisa.
Saya berakhir dengan ini:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
Ini menunjukkan perbedaan untuk komit yang ditentukan hanya jika nama file berisi kata 'test' (case-sensitive) dan tidak diakhiri dengan .sql
, modifikasi pipeline yang diperlukan untuk case Anda.