Yanlışlıkla Commit Edilen Gizli Dosyalar Git’ten Nasıl Silinir?

Versiyon kontrol sistemleriyle çalışırken en sık karşılaşılan sorunlardan biri, hassas bilgiler içeren dosyaların yanlışlıkla depoya eklenmesidir. Bu makale, bu tür sorunları nasıl önleyebileceğinizi ve halihazırda commit edilmiş hassas dosyalarla nasıl başa çıkabileceğinizi açıklıyor.
Yaygın Senaryolar
- .env dosyalarının commit edilmesi: Çevre değişkenleri, API anahtarları, veritabanı şifreleri gibi hassas bilgiler içerir.
- Yapılandırma dosyalarının eklenmesi: IDE yapılandırmaları veya yerel geliştirme ayarları.
- Log dosyaları ve geçici dosyalar: Büyük boyutlu ve genellikle takip edilmemesi gereken dosyalar.
- SSH anahtarları veya sertifikalar: Yüksek güvenlik riski oluşturan kimlik doğrulama bilgileri.
Zaten Commit Edilmiş Dosyaları Çözme
Senaryo 1: Dosyayı Git İzlemesinden Çıkarma
Eğer hassas bir dosya zaten commit edilmiş ancak henüz uzak depoya push edilmemişse:
# Dosyayı Git izlemesinden çıkar ama yerelde tut
git rm --cached hassas_dosya.env
# .gitignore dosyasına ekle
echo "hassas_dosya.env" >> .gitignore
# Değişiklikleri commit et
git commit -m "Hassas dosya Git izlemesinden çıkarıldı"
Senaryo 2: Dosya Zaten Uzak Depoya Gönderilmiş
Eğer hassas dosya zaten uzak depoya push edilmişse, durumu düzeltmek biraz daha karmaşıktır:
# Dosyayı Git izlemesinden çıkar
git rm --cached hassas_dosya.env
# .gitignore'a ekle
echo "hassas_dosya.env" >> .gitignore
# Commit et
git commit -m "Hassas dosya depodan kaldırıldı"
# Değişiklikleri uzak depoya gönder
git push
Önemli Not: Bu işlem dosyayı sadece en son commit’ten çıkarır. Git geçmişinde hâlâ bulunur. Şifre veya API anahtarı gibi bilgileri değiştirmeniz gerekir.
Senaryo 3: Git Geçmişinden Tamamen Silme (Dikkatli Kullanın)
Hassas bilgileri Git geçmişinden tamamen silmek için daha radikal bir çözüm gerekebilir:
# Git geçmişinden dosyayı tamamen silme
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch YOL/hassas_dosya.env" \
--prune-empty --tag-name-filter cat -- --all
# Git çöp toplayıcısını çalıştırın
git gc --prune=now
# Uzak depoyu güncelleyin
git push origin --force --all
Uyarı: filter-branch kullanmak, deponun geçmişini değiştirir ve ekip üyelerinin repolarını etkileyebilir. Bu yüzden dikkatli olun.
Önleyici Tedbirler
1. İyi Hazırlanmış .gitignore Dosyası Kullanın
Projenize uygun bir .gitignore dosyası oluşturun. Örnekler:
# Çevre değişkenleri ve yapılandırmalar
.env
.env.local
config.json
# IDE ve editör dosyaları
.idea/
.vscode/
*.sublime-*
# Log dosyaları
*.log
logs/
# Geçici dosyalar
tmp/
temp/
2. Git Template Kullanın
Yeni projeler için standart bir şablon oluşturabilirsiniz:
git config --global init.templatedir '~/.git-templates'
mkdir -p ~/.git-templates
curl https://www.toptal.com/developers/gitignore/api/node,python,java > ~/.git-templates/.gitignore
3. Pre-commit Kontrollerini Ayarlayın
Commit öncesi hassas dosyaları tarayan bir hook kullanabilirsiniz:
#!/bin/bash
# .git/hooks/pre-commit dosyasına kaydedin ve çalıştırılabilir yapın (chmod +x)
if git diff --cached --name-only | grep -q ".env\|id_rsa\|password"
then
echo "UYARI: Hassas dosya commit etmeye çalışıyorsunuz!"
exit 1
fi
4. Sahte Verileri Kullanın
Örnek veriler için sahte dosyalar oluşturun:
# .env.example dosyası oluşturun
echo "API_KEY=your_api_key_here" > .env.example
echo "DB_PASSWORD=your_password_here" >> .env.example
# Dosyayı Git'e ekleyin
git add .env.example
Sonuç
Hassas dosyaların yanlışlıkla Git’e eklenmesi yaygın bir sorundur, ancak .gitignore kullanımı, pre-commit kontrolleri ve iyi pratiklerle önlenebilir. Eğer hassas veriler zaten yüklenmişse, şifreleri derhal değiştirin ve Git geçmişinden temizleyin.


Leave A Comment