Git - Réécrire l'histoire

The Commissar Vanishes

Lorsqu’il y a des fichiers (grandes ou inutiles) dans votre dépôt git que vous souhaitez supprimer de l’histoire vous pouvez utiliser les méthodes suivantes.

Des dépôts typiques réduisent d’environ 20 Mo à moins de 1 Mo. 1

Utilisez git-filter-branch ou installez BFG.

brew install bfg

# Show sizes of files and folders
du -sh {.*,*}
# Find 10 biggest Files in Repo
# https://stackoverflow.com/questions/10622179/how-to-find-identify-large-files-commits-in-git-history#20609719
git gc
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')"

# Delete  folders
bfg --delete-folders <path> # --no-blob-protection

# Delete Files
bfg --delete-files <path> # --no-blob-protection

# Remove reflog
git reflog expire --expire=now --all && git gc --prune=now --aggressive

# If there are unstaged changes
git rm <path> --cached
git rm -r <path> --cached

N’oubliez pas d’ajouter les dossiers supprimés à votre .gitignore s’ils sont toujours présents.

Notes

  1. C'est une statistique sortie de nulle part.