Saya mencoba mengecualikan file ( db/irrelevant.php
) dari Git diff. Saya telah mencoba meletakkan file di db
subdirektori yang disebut .gitattributes
dengan baris irrelevant.php -diff
dan saya juga mencoba membuat file bernama .git/info/attributes
mengandung db/irrelevant.php
.
Dalam semua kasus, db/irrelevant.php
file tersebut disertakan dalam diff sebagai tambalan biner Git. Yang saya inginkan adalah agar perubahan pada file itu diabaikan oleh perintah diff. Apa yang saya lakukan salah?
.gitignore
sintaksis file. Misalnya:!*shrinkwrap.yaml
bukannya:!shrinkwrap.yaml
.git diff -- . ':(exclude)*.min.js' ':(exclude)*.min.css'
git diff -- . ":(exclude)db/irrelevant.php"
(tanda kutip ganda bukannya tanda kutip tunggal)git diff -- . :(exclude)db/irrelevant.php
Anda bisa mengatur pengandar diff khusus dengan perintah no op dan menetapkannya ke file-file yang harus diabaikan.
Buat driver diff spesifik repositori dengan perintah ini
atau untuk semua repo Anda dengan
--global
.(Jika
/bin/true
tidak ada di MacOS, alternatif akan menggunakan/usr/bin/true
atauecho
).Kemudian, tetapkan driver diff baru untuk file yang ingin Anda abaikan dalam
.git/info/attributes
file Anda .Jika keadaan ini seharusnya dibagikan dengan pengembang lain, Anda dapat menggunakan
.gitattributes
alih-alih.git/info/attributes
dan berbagigit config
perintah dengan rekan-rekan Anda (melalui file dokumentasi atau sesuatu).sumber
[diff "nodiff"]
`command = / bin / true` dan kemudian saya membuat file bernama .git / info / atribut yang saya tambahkan:irrelevant.php diff=nodiff
git diff --stat
. Dalam hal ini, seseorang dapat menggunakangit diff ... | diffstat
solusi.--no-ext-diff
Anda juga dapat menggunakan program filterdiff dari koleksi program patchutils untuk mengecualikan beberapa bagian dari diff. Sebagai contoh:
sumber
-p
, dari halaman manual (1), adalah "-pn, --strip-match = n Saat mencocokkan, abaikan komponen n pertama dari pathname." Butuh beberapa saat untuk menangkap yang-p 1
menghapusdb
bagian dari jalur OP. Jika Anda hanya ingin menentukan nama file dan mengabaikan semua kemungkinan jalur / dir, Anda dapat menggunakan-p 99
.Metode ini lebih pendek dari jawaban yang diterima.
Untuk informasi lebih lanjut tentang kemungkinan inklusi / pengecualian yang berbeda, baca pos lain ini
sumber
Solusi satu baris ini tidak memerlukan utilitas / unduhan lain:
Di mana
file/to/exclude.txt
nama file yang ingin Anda kecualikan, tentu saja.Sunting: ksenzee kredit untuk memperbaiki file yang terhapus karena melanggar diff.
sumber
git diff --stat master
tanpa banyak hasil - dapatkah Anda membantu?Benar-benar jawaban yang baik dari KurzedMetal untuk apa yang perlu saya lakukan, yang merupakan kemampuan untuk melihat bahwa file telah berubah, tetapi tidak untuk menghasilkan diff, yang bisa sangat besar, dalam kasus saya.
Tetapi seorang kolega saya menyarankan pendekatan yang bahkan lebih sederhana dan bekerja untuk saya:
menambahkan
.gitattributes
file di direktori tempat file tersebut diabaikan dengangit diff
berada dengan konten berikut:file-not-to-diff.bin -diff
Itu masih memungkinkan
git status
"melihat" jika file berubah.git diff
juga akan "melihat" bahwa file berubah, tetapi tidak akan menghasilkandiff
.Bahwa
.bin
ekstensi untuk file dalam contoh disengaja. Saya menyadari bahwa ini adalah perilaku default git untuk file biner, dan itu tidak memerlukan penanganan khusus.gitattributes
. Tetapi dalam kasus saya, file-file ini dikenali sebagai file teks oleh git dan utilitas "file" dan ini berhasil.sumber
Jawaban paling sederhana
git diff ':!db/irrelevant.php'
Itu hanya
':!<path to file>'
setelah perintah diff Anda. Perintah diff bisa serumit yang Anda mau, dan Anda bisa menggunakan wildcard suka*.min.js
atau menambahkan banyak pengecualian (pisahkan blok yang dikutip) jika mau.sumber
Relatif ke direktori root git
git diff
menerima pengecualian opsionalAnda mungkin ingin menambahkan beberapa kartu liar
Targetkan jenis file tertentu
Atau letakkan skrip kecil untuk dotfile Anda
Seperti
.bash_profile
atau.zshrc
sumber
git diff --staged
Semoga ini bisa membantu Anda.Ini sangat sederhana, Anda dapat mengecualikan apa yang Anda inginkan menggunakan perintah unix standar, perintah-perintah itu tersedia di bawah git bash bahkan di bawah lingkungan windows. Contoh di bawah ini menunjukkan cara mengecualikan diff untuk file pom.xml, periksa dulu diff untuk master hanya untuk nama file, kemudian gunakan file grep -v 'exclude yang tidak Anda inginkan dan kemudian jalankan lagi diff untuk master dengan daftar prepapred:
sumber
mirip dengan solusi Ben Roux , tetapi tetap berbagi:
atau, jika perubahan sudah dilakukan secara lokal:
Contoh:
sumber
Saya melakukan hal berikut:
Saya tahu ini bukan solusi yang elegan dan kadang-kadang tidak dapat digunakan (mis. Jika Anda sudah memiliki beberapa hal yang dipentaskan), tetapi ia berhasil tanpa harus mengetikkan perintah yang rumit
sumber
Jika Anda ingin melakukan ini hanya untuk memeriksa diff secara visual, alat diff visual (seperti Meld ) akan memungkinkan Anda melakukannya dengan perintah singkat yang mudah diingat.
Pertama, siapkan alat diff jika Anda belum melakukannya.
Kemudian, Anda dapat menjalankan direktori diff.
Anda dapat menelusuri diff (berdasarkan file) di Meld (atau alat pilihan Anda). Cukup jangan buka file yang ingin Anda abaikan.
sumber