Duplicata possible:
Comment purger un énorme fichier de l'historique des validations dans Git?
J'ai fait une chose stupide. Imaginez que j'ai validé un fichier de 100 Mo. Ensuite, je vois cela et je supprime ce fichier et je recommence. Il s'agit d'une procédure normale pour supprimer un fichier.
Mais maintenant, l'effet secondaire est que mon historique est lourd car il a enregistré ce gros fichier (je crois que c'est pourquoi il est lourd). J'utilise uniquement git local, donc je ne synchronise sur aucun serveur.
Comment supprimer définitivement ce fichier et économiser de l'espace disque?
Vous pouvez le faire en utilisant le git filter-branch
commande, comme ceci:
git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
Vous pouvez trouver plus de documentation ici http://dalibornasevic.com/posts/2-permanently-remove-files-and-folders-from-a-git-repository
La commande que vous recherchez est filter-branch
. Il vous permet de supprimer définitivement des fichiers d'une inscription. Ce blog a un excellent tutoriel sur la façon de supprimer les fichiers problématiques du référentiel
Vous pouvez prendre ce super script de David Underhill pour supprimer le fichier du dépôt git:
#!/bin/bash
set -o errexit
# Author: David Underhill
# Script to permanently delete files/folders from your git repository. To use
# it, cd to your repository's root and then run the script with a list of paths
# you want to delete, e.g., git-delete-history path1 path2
if [ $# -eq 0 ]; then
exit 0
fi
# make sure we're at the root of git repo
if [ ! -d .git ]; then
echo "Error: must run this script from the root of a git repository"
exit 1
fi
# remove all paths passed as arguments from the history of the repo
files=$@
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $files" HEAD
# remove the temporary history git-filter-branch otherwise leaves behind for a long time
rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --Prune