İçindekiler (6)
Yazılım projelerinde sürüm kontrol sistemi olarak Git kullanırken yapılan en yaygın ve riskli hatalardan biri; API anahtarlarını, veritabanı bağlantı parolalarını, yerel geliştirme ayarlarını veya devasa bağımlılık klasörlerini yanlışlıkla uzak depoya (remote repository) göndermektir. Bir kez Git geçmişine (commit history) sızan hassas veriyi oradan temizlemek son derece meşakkatli bir süreçtir. Bu kontrolsüz sızıntıları baştan engellemenin temel yolu, doğru kurgulanmış bir .gitignore dosyası kullanmaktır.
Bu kapsamlı teknik rehberde; .gitignore dosyasının mimarisini, sözdizimi (syntax) desenlerini, hassas verileri gizlerken uyulması gereken güvenlik kurallarını ve yaygın diller için hazır şablon yapılarını inceliyoruz.
.gitignore Nedir ve Ne Amaçla Kullanılır?
.gitignore, Git tarafından takip edilmemesi (untracked kalması) gereken dosya ve dizinlerin kalıplarını belirten düz metin biçiminde gizli bir yapılandırma dosyasıdır. Proje kök dizinine (root) veya ilgili alt dizinlere yerleştirilir.
Git, çalışma dizinindeki değişiklikleri incelerken bu dosya içindeki kuralları okur ve eşleşen dosyaları git status çıktılarında göz ardı eder. Bu mekanizma temelde üç amaca hizmet eder:
- Güvenlik: Gizli anahtarların (.env, SSH key, AWS credential) halka açık ya da şirket içi depolara sızmasını engeller.
- Depo Temizliği:
node_modules,venv, derlenmiş ikili dosyalar (.exe,.so) veya önbellek dosyaları gibi depoyu şişiren unsurların sürüm kontrolüne girmesini önler. - Çakışma Önleme: İşletim sistemi kalıntıları (
.DS_Store,Thumbs.db) ve IDE yapılandırmalarının (.vscode,.idea) geliştiriciler arasında kod çakışması (merge conflict) yaratmasını engeller.
Temel Sözdizimi (Syntax) ve Desen Kuralları
Bir .gitignore dosyası yazarken kullanılan temel globbing karakterleri ve anlamları aşağıdaki tabloda özetlenmiştir:
| Desen / Karakter | Eşleşme Kapsamı ve Açıklama | Örnek Kullanım |
|---|---|---|
# |
Yorum satırı başlatır; Git tarafından yok sayılır. | # Bu bir aciklama satiridir |
/ (Başta) |
Kuralın yalnızca .gitignore ile aynı dizinde geçerli olmasını sağlar. |
/config.json |
/ (Sonda) |
Kuralın yalnızca bir klasörle eşleştiğini, dosyaları kapsamadığını belirtir. | build/, logs/ |
* (Yıldız) |
Sıfır veya daha fazla karakterle eşleşir (dizin ayracı hariç). | *.log (tüm log dosyalarını yoksayar) |
** (Çift Yıldız) |
Tüm alt dizinleri kapsayan derin arama yapar. | **/temp (her seviyedeki temp dizini) |
? |
Tam olarak tek bir karakterle eşleşir. | file?.txt (file1.txt, fileA.txt) |
! (Ünlem) |
İstisna tanımlar; daha önce yok sayılan bir kuralı geçersiz kılar. | !important.log |
Hassas Verileri Gizleme Kuralları
Güvenlik açığı oluşmaması için .gitignore yapılandırılırken aşağıdaki kurallara kesinlikle sadık kalınmalıdır:
- 1. Asla .env Dosyalarını Depoya Göndermeyin: Ortam değişkenlerini tutan
.envdosyaları her zaman yok sayılmalıdır. Bunun yerine ekip üyelerine şablon olması için içinde sahte değerler barındıran bir.env.exampledosyası takip edilmelidir. - 2. İstisna Kurallarında Sıralamaya Dikkat Edin: Git kuralları yukarıdan aşağıya doğru yorumlar. Eğer bir üst klasörü tamamen yoksaydıysanız (
secret/), altındaki bir dosyayı ünlemle açamazsınız (!secret/readme.txtçalışmaz). Önce klasörün açılması, ardından içeriklerin kısıtlanması gerekir. - 3. Sertifikaları ve Anahtar Çiftlerini Hariç Tutun:
*.pem,*.key,*.p12ve benzeri kriptografik uzantılar istisnasız global olarak yoksayılmalıdır. - 4. Global .gitignore Kullanın: İşletim sistemi veya kişisel editör ayarlarınızı her projenin kendi
.gitignoredosyasına yazmak yerine, makinenizde tek bir global dosya oluşturup tanımlayın:git config --global core.excludesfile ~/.gitignore_global.
Dillere Göre Standart .gitignore Şablon Örneği
Tipik bir modern web veya backend projesinde bulunması gereken asgari .gitignore içeriği şu yapıya sahip olmalıdır:
# Ortam Değişkenleri ve Gizli Anahtarlar
.env
.env.local
.env.*.local
*.pem
*.key
# Bağımlılıklar (Dependencies)
node_modules/
venv/
env/
vendor/
# Derleme ve Çıktı Dizinleri (Build & Outputs)
dist/
build/
*.egg-info/
__pycache__/
*.py[cod]
# Log Dosyaları
*.log
npm-debug.log*
yarn-debug.log*
# İşletim Sistemi ve IDE Dosyaları
.DS_Store
Thumbs.db
.idea/
.vscode/*
!.vscode/settings.json
Zaten Takip Edilen (Tracked) Dosyayı .gitignore'a Eklemek
Geliştiricilerin en sık karşılaştığı sorun, daha önce commmit edilmiş bir dosyanın .gitignore listesine eklense bile hala takip edilmeye devam etmesidir. Git, indeksinde (cache) bulunan bir dosyayı .gitignore dosyasında görse dahi yok saymaz.
Bu durumu düzeltmek için dosyanın yerel diskinizden silinmeden yalnızca Git takip listesinden çıkarılması gerekir:
- Tek bir dosyayı takipten çıkarmak:
git rm --cached dosya_adi - Bir klasörü takipten çıkarmak:
git rm -r --cached klasor_adi/ - Tüm indeksi temizleyip kuralları yeniden uygulamak:
git rm -r --cached .git add .git commit -m "chore: gitignore kurallari guncellendi ve indeks temizlendi"
Sıkça Sorulan Sorular (SSS)
.gitignore dosyasının kendisi Git'e commit edilmeli midir?
Evet. .gitignore dosyası projeyi klonlayan diğer ekip üyelerinin de aynı yoksayma kurallarına tabi olması için depoya commit edilmeli ve sürüm kontrolünde tutulmalıdır.
Kazara commit edilen bir API anahtarını sadece .gitignore'a eklemek yeterli midir?
Kesinlikle hayır. Dosyayı takipten çıkarsanız dahi önceki commit geçmişinde şifre açık metin olarak kalır. Bu durumda öncelikle sızan API anahtarını servis sağlayıcısından derhal iptal edip yenilemeli (rotate etmeli), ardından git filter-repo veya BFG Repo-Cleaner gibi araçlarla Git tarihçesini temizlemelisiniz.
Proje için hazır .gitignore şablonlarını nereden bulabilirim?
GitHub'ın resmi gitignore deposu veya gitignore.io servisi üzerinden kullandığınız programlama dili (Python, PHP, Go vb.) ve işletim sistemine göre hazır, test edilmiş şablonları doğrudan temin edebilirsiniz.
Henüz yorum yapılmamış. İlk yorumu siz yapın!