Kullandığın dilleri, framework’leri, editörleri ve işletim sistemlerini seç; hepsi tek bir .gitignore dosyasında birleşsin. Bölümler başlıklı, tekrar eden kalıplar ayıklanmış, sıra bozulmamış olarak çıkar. Şablonlar github/gitignore deposundan alınmıştır ve sayfayla birlikte gelir; çalışırken hiçbir servise istek atılmaz.
Henüz bir şey seçmedin.
Bu aramaya uyan bir şablon yok.
Buraya yazdıkların dosyanın en sonuna, kendi başlığı altına eklenir ve seçimini her değiştirdiğinde yerinde kalır. En sonda oldukları için şablonlardan gelen kuralları ezerler.
Kullandığın dilleri ve framework’leri listeden işaretle. Arama kutusuna yazarak da bulabilirsin; seçtiklerin üstte etiket olarak birikir.
VS Code, JetBrains, Vim gibi editörler ile macOS, Windows ve Linux şablonları ayrı gruplarda durur. Bunlar dosyanın en sonuna yazılır, tıpkı elle yazarken olduğu gibi.
Yalnızca senin projene özel kalıpları alttaki kutuya ekle. En sonda durdukları için şablonlardan gelen kuralları ezerler ve seçimi değiştirdiğinde silinmezler.
Önizlemede satır sayısını ve kaç tekrarın ayıklandığını görürsün. Dosyayı panoya kopyala ya da doğrudan .gitignore adıyla indirip deponun köküne koy.
Buradaki şablonların neredeyse tamamı GitHub’ın kendi github/gitignore deposundan, olduğu gibi alınmıştır. Bu depo bu işin fiilî standardıdır: bir dilin ya da framework’ün hangi dosyaları ürettiğini en iyi bilenler oraya yazar, değişiklikler tartışılarak girer. CC0 1.0 ile yayımlandığı için kullanmak bir atıf yükümlülüğü doğurmaz; yine de burada yazıyor, çünkü listenin nereden geldiğini bilmek onu güvenilir kılan şeyin ta kendisi.
Şablonlar sayfanın kendisiyle birlikte gelir. Bu sayfa çalışırken GitHub’a ya da başka bir servise istek atmaz: dışarıdaki bir servis yavaşladığında ya da istek sınırına takıldığında bu araç etkilenmez, ürettiği dosya da bugün neyse yarın odur.
Upstream’de karşılığı olmayan birkaç bölüm — Django, Flask, React, Vue — Coderspace tarafından derlendi. Her bölümün başlığının hemen altında kaynağı yazar, yani ürettiğin dosyada hangi satırın nereden geldiği belli olur.
Git bir dosyanın yoksayılıp yoksayılmayacağına karar verirken .gitignore’u baştan sona okur ve o dosyayla eşleşen SON satırı uygular. Bu yüzden iki dosyayı alt alta yapıştırmak masum bir işlem değildir: sonradan gelen bir kalıp, önceki bir istisnayı sessizce iptal edebilir.
Bu araç hiçbir satırı yerinden oynatmaz. Bölümler sabit bir sırayla yazılır — önce diller ve framework’ler, sonra editörler, en sonda işletim sistemleri — ve bir bölümün içindeki satırlar geldikleri şablondaki sıralarını korur. Kutuları hangi sırayla işaretlediğin çıktıyı değiştirmez; aynı seçim her zaman aynı dosyayı verir.
| Kalıp | Anlamı |
|---|---|
build/ |
Adı build olan her dizini, hangi derinlikte olursa olsun yoksayar. Sonundaki eğik çizgi “yalnızca dizin” demektir. |
/build |
Yalnızca deponun kökündeki build’i yoksayar; alt dizinlerdeki aynı adlı dosya ve dizinler etkilenmez. |
*.log |
Uzantısı .log olan her dosyayı yoksayar. Yıldız eğik çizgiyle eşleşmez, ama kalıpta eğik çizgi olmadığı için kural her dizinde geçerlidir. |
!.env.example |
Ünlem bir istisnadır: kendinden önce yoksayılmış bir dosyayı geri katar. Kendinden sonra gelen bir kalıp dosyayı yeniden yoksayarsa istisna işe yaramaz. |
logs/* |
Dizinin içindekileri yoksayar, dizinin kendisini değil. İstisna yazabilmenin tek yolu budur: logs/ yazarsan Git dizine hiç girmez ve içindeki hiçbir istisna çalışmaz. |
Python ile Django’yu, Java ile Gradle’ı birlikte seçtiğinde aynı kalıp birkaç bölümde birden geçer. Bunları körü körüne silmek doğru değildir: iki aynı satırın arasına bir istisna girmişse, ikincisini atmak o istisnayı kalıcı hale getirir ve dosyanın anlamı değişir.
Bu araç bir tekrarı yalnızca aradaki satırların sonucu değiştiremeyeceği durumda atar: olumlu bir kalıp, son yazılışından beri hiç istisna yazılmamışsa; bir istisna ise son yazılışından beri hiç olumlu kalıp yazılmamışsa. Diğer her durumda tekrar olduğu yerde durur. Kaç satırın ayıklandığını önizlemenin üstünde görürsün.
Altında hiç kalıp kalmayan açıklama satırları da düşer, böylece dosyada karşılığı olmayan yorum kalmaz.
En sık karşılaşılan yanılgı budur: .gitignore yalnızca Git’in henüz takip etmediği dosyalar için çalışır. Bir dosya bir kez commit’lendiyse, kalıbı sonradan eklemek onu takipten çıkarmaz.
Dosyayı diskte bırakıp takipten çıkarmak için git rm --cached ile indeksten sil, sonra değişikliği commit’le. Sızan şey bir parola, anahtar ya da token ise dosyayı silmek yetmez: geçmişte durmaya devam eder, o yüzden önce sırrı iptal edip yenisini üret.
| Durum | Ne yapmalı? |
|---|---|
| Dosya henüz commit’lenmedi | Kalıbı .gitignore’a ekle; başka bir şey gerekmez. |
| Dosya takip ediliyor | git rm --cached <file>Dosyayı diskten silmeden indeksten çıkarır. |
| Bir dizin takip ediliyor | git rm -r --cached <directory>Sonra değişikliği commit’le. |
| Kural neden çalışmıyor bilmiyorum | git check-ignore -v <file>Hangi dosyadaki hangi satırın karar verdiğini söyler. |
| Sadece kendi makinene özel kurallar | Depoya değil, .git/info/exclude dosyasına ya da global gitignore’a yaz. |
Dil, framework, editör ve işletim sistemi şablonlarını tek dosyada toplar. Her bölüm kendi başlığı ve kaynağıyla yazılır.
Aynı kalıbı iki kez yazmaz, ama bir istisnanın anlamını değiştirecekse tekrarı olduğu yerde bırakır.
Editör ve işletim sistemi bölümleri en sona yazılır. Aynı seçim, hangi sırayla işaretlenirse işaretlensin, aynı dosyayı verir.
Yazdığın kalıplar en sonda durur, seçimi değiştirdiğinde silinmez ve şablonlardan gelen kuralları ezer.
Son seçimin ve kendi kalıpların tarayıcında saklanır; sayfaya döndüğünde baştan işaretlemek gerekmez.
Şablonlar sayfayla birlikte gelir. Üretim tarayıcında yapılır; ne GitHub’a ne başka bir servise istek gider.
Git'in depoya almaması gereken dosyaları listeler: derleme çıktıları, bağımlılık dizinleri, editör ayar dosyaları, gizli anahtarlar. Dosya deponun köküne konur ve ekipteki herkes için geçerlidir. Alt dizinlere de ayrı bir .gitignore koyabilirsin; o dosya yalnızca bulunduğu dizin ve altı için çalışır.
Evet, araç zaten bunun için var. Kaç şablon seçersen seç hepsi tek dosyada, sabit bir sırayla toplanır: önce diller ve framework’ler, sonra editörler, en sonda işletim sistemleri. Aynı kalıp birkaç şablonda geçiyorsa tekrar ayıklanır; ama ayıklamak bir istisnanın anlamını değiştirecekse tekrar olduğu yerde bırakılır.
Şablonların neredeyse tamamı GitHub'ın github/gitignore deposundan olduğu gibi alınmıştır; CC0 1.0 ile yayımlanır. Sayfayla birlikte geldikleri için araç çalışırken GitHub'a istek atmaz. Ürettiğin dosyanın başında şablonların alındığı sürüm ve tarih yazar, her bölümün başlığının altında da kaynağı belirtilir.
Hayır. .gitignore yalnızca Git'in henüz takip etmediği dosyalara bakar. Takip edilen bir dosyayı diskte bırakıp indeksten çıkarmak için git rm --cached <dosya> çalıştır, sonra değişikliği commit'le. Sızan şey bir parola ya da token ise bu da yetmez: geçmişte kalmaya devam eder, önce sırrı iptal et.
En sık iki sebep var. Birincisi dosyanın zaten takip ediliyor olması. İkincisi sıra: Git eşleşen SON satırı uygular, yani sonradan gelen bir kalıp önceki bir istisnayı iptal edebilir. Ayrıca logs/ yazarsan Git o dizine hiç girmez ve içindeki !logs/x istisnası çalışmaz; bunun için logs/* yazmalısın. Hangi satırın karar verdiğini git check-ignore -v <dosya> söyler.
Evet. Kendi kalıplarını alttaki kutuya yaz; dosyanın en sonuna, kendi başlığı altına eklenirler. En sonda oldukları için şablonlardan gelen kuralları ezerler ve seçimini değiştirdiğinde silinmezler. Seçimin ve yazdıkların tarayıcında saklanır, sayfaya döndüğünde yerinde durur.