J'ai réécrit l'historique de mon référentiel pour supprimer certains gros fichiers FLV en utilisant git filter-branch
. J'ai principalement suivi l'article de Github sur les suppression des données sensibles et des instructions similaires trouvées ailleurs sur Internet :
Suppression des gros FLV :
git filter-branch --index-filter 'git rm --cached --ignore-unmatch public/video/*.flv' --prune-empty -- --all
Suppression des références originales :
rm -rf .git/refs/original/
Nettoyer le reflog :
git reflog expire --expire=now --all
Élagage des objets inaccessibles :
git gc --prune=now
Agressivement l'élagage des objets inaccessibles :
git gc --aggressive --prune=now
Je remballe des choses :
git repack -A -d
Et mon gitdir est toujours de 205 Mo, contenu presque entièrement dans un seul packfile :
$ du -h .git/objects/pack/*
284K .git/objects/pack/pack-f72ed7cee1206aae9a7a3eaf75741a9137e5a2fe.idx
204M .git/objects/pack/pack-f72ed7cee1206aae9a7a3eaf75741a9137e5a2fe.pack
Utilisation de ce script Je peux voir que les FLVs que j'ai supprimés sont toujours contenus dans le pack :
All sizes are in kB's. The pack column is the size of the object, compressed, inside the pack file.
size pack SHA location
17503 17416 1be4132fa8d91e6ce5c45caaa2757b7ea87d87b0 public/video/XXX_FINAL.flv
17348 17261 b7aa83e187112a9cfaccae9206fc356798213c06 public/video/YYY_FINAL.flv
....
Cloner le référentiel via git clone --bare my-repo
donne my-repo.git
qui a également une taille de 205MB.
Que puis-je faire pour supprimer ces objets (vraisemblablement) non référencés du pack et ramener mon référentiel à la taille qu'il aurait eu s'il n'avait jamais été livré ? S'ils sont toujours référencés d'une manière ou d'une autre, y a-t-il un moyen de savoir où ?
Mise à jour
En essayant de réexécuter git filter-branch
j'ai reçu cet avis :
Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f
J'ai vérifié qu'il y avait pas de réfs en .git/refs/original
En effet, le répertoire n'existait pas du tout. Y a-t-il une autre façon pour git de stocker les références, que je ne connais pas ?