web-dev-qa-db-fra.com

Supprimer complètement un fichier de l'ensemble du référentiel git

En utilisant git pour un projet, j'ai accidentellement ajouté à un commit un gros .Zip fichier. Je n'ai pas remarqué jusqu'à ce que je commence à le télécharger sur github. Quand j'ai remarqué, j'ai frappé ctrl-c, git remove, git commit et l'a téléchargé à nouveau (maintenant avec le fichier non suivi).

Je sais que ce n'était pas le bon choix à faire, car une fois que j'ai commis le .Zip, il reste dans le dépôt jusqu'à ce que je revienne au commit, mais malheureusement je ne l'ai pas fait.

Maintenant, lorsque quelqu'un essaie de télécharger à partir du référentiel, cela prend beaucoup de temps, parfois donne git the remote end hung up unexpectedly (que j'ai lu peut être résolu en faisant git config) et est très ennuyeux.

Mon point est le suivant: existe-t-il un moyen de dire à une autre requête pull/fetch d'oublier ce fichier spécifique dans cette version de commit spécifique?

35
Paulo Bu

Github fournit un page d'aide utile sur la suppression de fichiers comme ceci. Il y a aussi d'autres questions sur StackOverflow qui couvrent ce

Voir aussi cette section du livre Pro Git , un exemple donné ici:

Pour supprimer un fichier nommé passwords.txt de tout votre historique, vous pouvez utiliser l'option --tree-filter pour filtrer-branche:

$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21)
Ref 'refs/heads/master' was rewritten

Après le nettoyage, vous pouvez également essayer un git gc pour compresser et nettoyer davantage le référentiel.

63
Paul Dixon

Il y a maintenant un outil appelé "BFG Repo-Cleaner", il est mentionné sur github.com comme une alternative à filter-branch https://help.github.com/articles/remove-sensitive-data/

Lien vers la page de l'outil https://rtyley.github.io/bfg-repo-cleaner/

4
bigsolom