Apakah ada cara untuk melihat mengapa beberapa file diabaikan oleh git (yaitu aturan mana dalam .gitignore
file yang menyebabkan file tersebut diabaikan)?
Bayangkan saya punya ini (atau skenario yang jauh lebih kompleks, dengan ratusan folder dan puluhan .gitignore
file:
/
-.gitignore
-folder/
-.gitignore
-subfolder/
-.gitignore
-file.txt
Jika saya menjalankan git add folder/subfolder/file.txt
git, mungkin dikeluhkan karena diabaikan:
The following paths are ignored by one of your .gitignore files:
folder/subfolder/file.txt
Use -f if you really want to add them.
Apakah ada cara untuk mengetahui yang mana dari semua yang mungkin .gitignore
memiliki aturan untuk mengabaikan file ini, dan juga menunjukkan aturannya? Suka:
The following paths are ignored by your folder/.gitignore file (line 12: *.txt)
folder/subfolder/file.txt
Use -f if you really want to add them.
Atau hanya:
$ git why-is-ignored folder/subfolder/file.txt
folder/.gitignore:12:*.txt
git check-ignore
akan segera (git1.8.5 / 1.9) memiliki--no-index
opsi. Lihat jawaban saya di bawah iniGIT_TRACE_EXCLUDE=1 git status
akan segera menjadi cara tambahan untuk men-debug.gitignore
aturan. Lihat jawaban saya yang diedit di bawah iniJawaban:
Lihat halaman manual untuk lebih jelasnya.
Jawaban asli berikut:
git saat ini tidak menyediakan yang seperti ini. Tetapi setelah melihat pertanyaan Anda, saya melakukan beberapa pencarian di Google dan menemukan bahwa pada tahun 2009 fitur ini diminta dan diterapkan sebagian . Setelah membaca utas, saya menyadari itu tidak akan terlalu banyak pekerjaan untuk melakukannya dengan benar, jadi saya sudah mulai mengerjakan tambalan dan berharap untuk menyelesaikannya pada satu atau dua hari berikutnya. Saya akan memperbarui jawaban ini ketika sudah siap.
UPDATE: Wow, itu jauh lebih sulit daripada yang saya harapkan. Jeroan dari
git
penanganan yang dikecualikan cukup samar. Anyway, inilah sebuah hampir seri selesai komit yang berlaku untuk hulu saat inimaster
cabang. Test suite selesai 99%, tapi saya belum selesai menangani--stdin
opsi ini. Semoga saya akan mengaturnya akhir pekan ini, dan kemudian mengirimkan tambalan saya ke milis git.Sementara itu, saya pasti akan menerima pengujian dari siapa saja yang dapat melakukannya - cukup tiruan dari garpu saya
git
, periksacheck-ignore
cabang, dan kompilasi seperti biasa.UPDATE 2: Sudah selesai! Versi terbaru ada di github seperti di atas, dan saya telah mengirimkan seri tambalan ke milis git untuk ditinjau oleh rekan sejawat. Mari kita lihat apa yang mereka pikirkan ...
UPDATE 3: Setelah beberapa bulan peretasan / tambalan ulasan / diskusi / menunggu, saya senang dapat mengatakan bahwa fitur ini sekarang telah mencapai
master
cabang git , dan akan tersedia di rilis berikutnya (1.8.2, diharapkan ke-8 Maret 2013). Inicheck-ignore
halaman manual . Fiuh, itu jauh lebih banyak pekerjaan daripada yang saya harapkan!UPDATE 4: Jika Anda tertarik dengan cerita lengkap tentang bagaimana jawaban ini berkembang dan fitur datang untuk diimplementasikan, lihat episode # 32 dari podcast GitMinutes .
sumber
git check-ignore
tidak melakukan apa-apa.git check-ignore
hadir dan bekerja di 1.8.2. Jika tingkah lakunya tidak seperti yang Anda harapkan, saya sarankan Anda (kembali) membaca halaman buku panduan, dan jika masih belum, silakan kirimkan laporan bug yang tepat pada milis git. Hanya mengatakan itu tidak melakukan apa pun tidak sangat membantu. Saya berharap Anda memiliki mungkin menjalankannya pada non-diabaikan berkas dan tidak benar mengharapkan beberapa output (meskipun saya mungkin akan menambahkan dukungan untuk--show-unmatched
ke--verbose
mode keluaran di masa depan).Perbarui git 2.8 (Maret 2016):
Lihat " Cara memvalidasi
.gitignore
file "Itu saling melengkapi dengan yang
git check-ignore -v
dijelaskan di bawah ini.Jawaban asli: September 2013 (git 1.8.2, lalu 1.8.5+):
git check-ignore
meningkat lagi di git 1.8.5 / 1.9 (Q4 2013) :Lihat komit 8231fa6 dari https://github.com/flashydave :
sumber
Saya tidak dapat menemukan apa pun di halaman manual tetapi di sini adalah skrip cepat dan kotor yang akan memeriksa file Anda di setiap direktori induk untuk melihat apakah itu bisa ditambahkan git. Jalankan di direktori yang berisi file masalah sebagai:
di mana
STOP_DIR
direktori tingkat atas dari proyek Git danFILENAME
merupakan nama file masalah (tanpa jalur). Itu membuat file kosong dengan nama yang sama di setiap tingkat hirarki (jika tidak ada) dan mencobagit add -n
untuk melihat apakah itu dapat ditambahkan (itu membersihkan sendiri). Ini menghasilkan sesuatu seperti:Naskah:
sumber
Untuk menambah jawaban utama menggunakan
git check-ignore -v filename
(terima kasih BTW) saya menemukan bahwa file .gitignore saya memblokir semuanya karena ada baris baru setelah wildcard, jadi saya punya:* .sublime-project
sebagai contoh. Saya baru saja menghapus baris baru, dan voila! Itu diperbaiki.
sumber