Saya bertanya-tanya bagaimana saya bisa mengecualikan seluruh direktori dari Git diff saya. (Dalam hal ini / spesifikasi). Saya membuat diff untuk seluruh rilis perangkat lunak kami menggunakan perintah git diff. Namun perubahan pada spesifikasi tidak relevan untuk prosedur ini, dan hanya membuat sakit kepala. sekarang saya tahu saya bisa melakukannya
git diff previous_release..current_release app/
Ini akan membuat perbedaan untuk semua perubahan dalam direktori aplikasi, tetapi tidak misalnya, di direktori lib /. Adakah yang tahu bagaimana menyelesaikan tugas ini? Terima kasih!
Sunting: Saya hanya ingin menjadi jelas, saya tahu saya bisa merangkai parameter dari semua direktori saya di akhir, minus / spec. Saya berharap ada cara untuk benar-benar mengecualikan direktori tunggal dalam perintah.
Jawaban:
Dengan asumsi Anda menggunakan bash, dan Anda telah mengaktifkan globbing diperpanjang (
shopt -s extglob
), Anda bisa mengatasinya dari sisi shell:Menghemat Anda harus daftar semua hal lain.
Atau, shell-agnostik:
Anda bisa membungkusnya dalam skrip shell satu liner untuk menyelamatkan diri Anda dari mengetik ulang argumen.
sumber
.!(.|)
agar cocok dengan semua yang dimulai dengan.
selain.
dan..
.--
saya baru saja menambahkan harus memperbaikinya.--name-only
di bagian paling akhir juga.-- path/of/new/file
dan itu akan mengetahuinya :)Berdasarkan jawaban ini, Anda juga dapat menggunakan:
Ini adalah fitur git yang agak baru yang memungkinkan mengecualikan jalur tertentu. Itu harus lebih dapat diandalkan daripada berbagai oneliners shell.
Saya memposting ini di sini karena pertanyaan ini masih menjadi hit # 1 untuk "git diff exclude path".
sumber
git diff previous_release current_release --name-status -- . ':!spec'
current_release
danprevious_release
- membuat saya tersenyum ketika saya menemukan jawabannya.git diff --stat dev -- . ':!/Mopy/Docs/*'
. Apa yang tidak berhasil untuk sayagit diff dev --stat -- . ':!('Mopy/Docs/Wrye Bash General Readme.html'|'Mopy/Docs/Wrye Bash Advanced Readme.html')'
dan variasigit diff --check -- . ':!config/database.yml'
git diff previous_release current_release -- . ':!file_a' ':!file_b'
Jika Anda ingin menentukan lebih dari satu jalur untuk dikecualikan dalam git diff, Anda cukup menambahkan parameter pengecualian tambahan sampai akhir, misalnya untuk mengecualikan semua yang ada di direktori vendor dan bin dari statistik: -
sumber
Anda dapat mencoba dan menghapus atribut diff untuk file apa pun dalam direktori lib.
.gitattributes
:racl101 menambahkan dalam komentar :
sumber
.gitattributes
file itu di cabang khusus yang dibuat hanya untuk jenis 'rilis';) Rebase cabang khusus di atascurrent_release
dan lakukan diff Anda dari sana._site/* -diff
Git diff sekarang menerima format pengecualian khusus:
git diff -- ':(exclude)lib/*'
Berhati-hatilah jika Anda memiliki banyak nama folder yang berulang ('/ app', '/ lib', dll.), Karena ini akan mengecualikan file relatif terhadap direktori kerja saat ini DAN direktori root git.
sumber
git diff -- . ':(exclude)lib/*'
?git diff
untuk segala hal relatif terhadap jalan Anda saat ini, daripada membutuhkangit diff -- .
git diff -- ":(exclude)lib/*"
Relatif ke direktori root git
git diff
menerima pengecualian opsionalAnda mungkin ingin menambahkan beberapa kartu liar
Targetkan jenis file tertentu
Beberapa gula sintaksis diterapkan
Atau letakkan skrip kecil untuk dotfile Anda
Seperti
.bash_profile
atau.zshrc
sumber
sumber