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