(résolu, voir le bas du corps de la question)
Cela fait longtemps que je cherche cela, ce que j'ai jusqu'à présent, c'est.. :
- http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/ et
- http://progit.org/book/ch9-7.html
A peu près la même méthode, mais les deux laissent des objets dans les fichiers pack... Coincé.
Ce que j'ai essayé :
git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_name'
rm -Rf .git/refs/original
rm -Rf .git/logs/
git gc
J'ai toujours des fichiers dans le pack, et c'est ainsi que je le sais :
git verify-pack -v .git/objects/pack/pack-3f8c0...bb.idx | sort -k 3 -n | tail -3
Et ceci :
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch file_name" HEAD
rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune
Le même...
Essayé git clone
truc, il a supprimé certains fichiers (~3000 d'entre eux) mais les plus gros fichiers sont toujours là...
J'ai quelques gros fichiers dans le dépôt, ~200M, et je ne veux vraiment pas qu'ils s'y trouvent... Et je ne veux pas réinitialiser le référentiel à 0 :(
SOLUTION : C'est le moyen le plus court de se débarrasser des fichiers :
- vérifier .git/packed-refs - mon problème était que j'avais là un
refs/remotes/origin/master
pour un dépôt distant, supprimez-la, sinon git ne supprimera pas ces fichiers. -
(facultatif)
git verify-pack -v .git/objects/pack/#{pack-name}.idx | sort -k 3 -n | tail -5
- pour vérifier les fichiers les plus volumineux -
(facultatif)
git rev-list --objects --all | grep a0d770a97ff0fac0be1d777b32cc67fe69eb9a98
- pour vérifier quels sont ces fichiers -
git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_names'
- pour supprimer un fichier de toutes les révisions -
rm -rf .git/refs/original/
- pour supprimer la sauvegarde de git -
git reflog expire --all --expire='0 days'
- d'expulser tous les objets en vrac -
git fsck --full --unreachable
- vérifier s'il n'y a pas d'objets détachés -
git repack -A -d
- reconditionnement -
git prune
- pour enfin supprimer ces objets