Un scenariu de panică frecvent: un dezvoltator a comis din greșeală un fișier .env cu chei private AWS sau parole de baze de date, iar apoi a dat git push. Ștergerea fișierului printr-un nou commit (git rm .env && git commit) nu rezolvă problema de securitate, deoarece fișierul rămâne salvat pentru totdeauna în istoricul commit-urilor anterioare! Utilitarul modern recomandat oficial de comunitatea Git este git-filter-repo (înlocuitorul rapid al vechiului git filter-branch).
# Instalați instrumentul (scris în Python):
pip install git-filter-repo
# ATENȚIE: Lucrați întotdeauna pe o clonă proaspătă de siguranță!
git clone --bare git@github.com:firma/proiect.git proiect-backup.git
# Șterge complet fișierul '.env' din fiecare commit, tag și ramură din istorie:
git filter-repo --path .env --invert-paths
# Rescrierea se finalizează în sub 2 secunde chiar și pe depozite de zeci de mii de commit-uri!
2. Micșorarea Depozitelor: Eliminarea Fișierelor Uriașe
Dacă cineva a adăugat în trecut arhive zip sau videoclipuri de 200 MB care au umflat folderul .git la câțiva gigaocteți, le puteți curăța automat:
# Elimină orice fișier istoric a cărui dimensiune depășește 50 MB:
git filter-repo --strip-blobs-bigger-than 50M
# Forțează curățarea internă imediată a bazei de date de obiecte:
git reflog expire --expire=now --all
git gc --prune=now --aggressive
Actualizarea Serverului Remote (Push Forțat)
Deoarece git-filter-repo rescrie hash-urile tuturor commit-urilor modificate, actualizarea serverului central necesită un push forțat:
git push origin --force --all
git push origin --force --tags
Informați întreaga echipă să facă o clonă nouă a depozitului după această operațiune pentru a evita reintroducerea commit-urilor vechi!