Saya dapat memikirkan setidaknya dua situasi di mana Anda ingin memiliki banyak .gitignore
file di direktori (sub) yang berbeda.
Direktori yang berbeda memiliki jenis file yang berbeda untuk diabaikan. Misalnya .gitignore
di direktori teratas proyek Anda mengabaikan program yang dibuat, sementara Documentation/.gitignore
mengabaikan dokumentasi yang dihasilkan.
Abaikan file yang diberikan hanya dalam diberikan (sub) direktori (Anda dapat menggunakan /sub/foo
di .gitignore
, meskipun).
Harap diingat bahwa pola dalam .gitignore
file berlaku secara rekursif ke direktori (sub) file di dan semua subdirektori, kecuali pola berisi '/' (jadi misalnya pola name
berlaku untuk file apa pun yang disebutkan name
dalam direktori tertentu dan semua subdirektori, sementara /name
berlaku untuk file dengan nama ini hanya di direktori yang diberikan).
Documentation/**/*.html
(perhatikan bahwa sembarang slash pola; yang/foo
digunakan untuk jangkar file langsung di direktori)Sebagai catatan tangensial, satu kasus di mana kemampuan untuk memiliki banyak
.gitignore
file sangat berguna adalah jika Anda menginginkan direktori tambahan dalam copy pekerjaan Anda yang tidak pernah ingin Anda komit. Cukup letakkan 1-byte.gitignore
(hanya berisi satu tanda bintang) di direktori itu dan itu tidak akan pernah muncul digit status
dll.sumber
printf \* > .gitignore
(pembersihan otomatis ketika Anda menghapus direktori). Saya yakin ada situasi di mana.git/info/exclude
ada pilihan yang lebih tepat, tetapi tidak banyak.Anda dapat memiliki banyak
.gitignore
, masing-masing tentu saja di direktori sendiri.Untuk memeriksa aturan gitignore bertanggung jawab untuk mengabaikan file, gunakan
git check-ignore
:git check-ignore -v -- afile
.Dan Anda dapat memiliki versi berbeda dari
.gitignore
file per cabang: Saya telah melihat konfigurasi semacam itu untuk memastikan satu cabang mengabaikan file sementara cabang lainnya tidak: lihat pertanyaan ini misalnya .Jika repo Anda menyertakan beberapa proyek independen, akan lebih baik untuk merujuknya sebagai submodul .
Itu akan menjadi praktik terbaik aktual, yang memungkinkan masing-masing proyek tersebut dikloning secara independen (dengan
.gitignore
file masing-masing ), sementara direferensikan oleh revisi khusus dalam proyek induk global.Lihat sifat sebenarnya dari submodula untuk informasi lebih lanjut.
Perhatikan bahwa, sejak git 1.8.2 (Maret 2013) Anda dapat melakukan
git check-ignore -v -- yourfile
untuk melihat gitignore mana yang dijalankan (dari.gitignore
file mana ) diterapkan ke 'yourfile
', dan lebih memahami mengapa kata file tersebut diabaikan.Lihat " aturan mana
gitignore
yang mengabaikan file saya? "sumber
Pro tunggal
Mudah ditemukan.
Memburu aturan pengecualian bisa sangat sulit jika saya memiliki beberapa gitignore, pada beberapa level dalam repo.
Dengan banyak file, Anda juga biasanya berakhir dengan duplikasi yang adil.
Pro berganda
Lingkup "pengetahuan" ke bagian bagan file tempat diperlukan.
Karena Git hanya melacak file, gitignore kosong adalah satu-satunya cara untuk melakukan direktori "kosong".
(Dan sebelum Git 1.8, satu-satunya cara untuk mengecualikan pola seperti
my/**.example
adalah membuatmy/.gitignore
dengan pola**.foo
. Alasan ini tidak berlaku sekarang, seperti yang dapat Anda lakukan/my/**/*.example
.)Saya lebih suka satu file, di mana saya dapat menemukan semua pengecualian. Saya tidak pernah melewatkan per-direktori .svn, dan saya juga tidak akan melewatkan per-direktori .gitignore.
Yang mengatakan, banyak gitignores cukup umum. Jika Anda menggunakannya, setidaknya konsistenlah dalam menggunakannya agar masuk akal untuk digunakan. Misalnya, Anda dapat meletakkannya di direktori hanya satu tingkat dari root.
sumber
empty
demikian) lebih umum.Ada banyak skenario di mana Anda ingin berkomitmen direktori untuk repo Git Anda tapi tanpa file di dalamnya, misalnya
logs
,cache
,uploads
direktori dllJadi yang selalu saya lakukan adalah menambahkan
.gitignore
file di direktori tersebut dengan konten berikut:Dengan
.gitignore
file ini , Git tidak akan melacak file apa pun di direktori tersebut tetapi masih mengizinkan saya untuk menambahkan.gitignore
file dan karenanya direktori itu sendiri ke repo.sumber