J'ai accidentellement ajouté, commis et poussé un énorme fichier binaire avec mon tout dernier commit dans un dépôt Git.
Comment puis-je faire en sorte que Git supprime le(s) objet(s) qui a/ont été créé(s) pour ce commit afin que ma .git
le répertoire se rétrécit à nouveau à une taille raisonnable ?
Modifier : Merci pour vos réponses ; j'ai essayé plusieurs solutions. Aucune n'a fonctionné. Par exemple, celle de GitHub a supprimé les fichiers de l'historique, mais l'option .git
La taille du répertoire n'a pas diminué :
$ BADFILES=$(find test_data -type f -exec echo -n "'{}' " \;)
$ git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $BADFILES" HEAD
Rewrite 14ed3f41474f0a2f624a440e5a106c2768edb67b (66/66)
rm 'test_data/images/001.jpg'
[...snip...]
rm 'test_data/images/281.jpg'
Ref 'refs/heads/master' was rewritten
$ git log -p # looks nice
$ rm -rf .git/refs/original/
$ git reflog expire --all
$ git gc --aggressive --prune
Counting objects: 625, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (598/598), done.
Writing objects: 100% (625/625), done.
Total 625 (delta 351), reused 0 (delta 0)
$ du -hs .git
174M .git
$ # still 175 MB :-(
15 votes
Juste un rappel pour les modérateurs, cette question appartient à 100% à SO, pas à superuser.
0 votes
Voir aussi stackoverflow.com/questions/2116778/reduce-git-repository-size/ y stackoverflow.com/questions/685319/
0 votes
Comme mentionné ici ( stackoverflow.com/questions/685319/ ), avez-vous essayé un repack après votre gc ?
git-repack -a
suivi pargit-prune-packed
par exemple. Voir blog.felipebalbi.com/2007/12/19/2 votes
@Jonas : et si, après avoir fait tout cela, vous clonez votre repo ? Est-ce que vous puis obtenir un clone avec la taille réduite souhaitée ?
0 votes
@VonC : Non. La même taille. En fait, je vois toujours le "mauvais" engagement dans l'image de marque.
git reflog
-- Je ne suis pas censé l'être, n'est-ce pas ?1 votes
@Jonas : après tout ce que tu as fait (
filter-branch
,gc
,repack
...), non, vous ne devriez pas voir de bad commit du tout. C'est un signe que le nettoyage n'a pas eu lieu comme prévu.0 votes
Duplicata possible de Comment supprimer les blobs non référencés de mon repo git ?