Supprimer des fichiers d'un dépot GIT

Retour aux articles Dans #git le 01/11/2016 par Emmanuel BALLERY

Supprimer des fichiers d'un dépot GIT

EDIT 02/2018 : Github recommande désormais l'usage de BFG Repo-Cleaner pour supprimer définitivement des fichiers/dossiers de vos dépots. L'outil est développé en Scala et aurait l'avantage d'être bien plus rapide (10 à 720 fois plus rapide) et plus simple d'usage (un seul paramètre). Cela dit, même si filter-branch est très long sur mes environnements Windows (plusieurs minutes parfois), il s'éxécute en quelques secondes sur Linux et avec des dépots très volumineux. Il est à noter aussi que BFG Repo-Cleaner fonctionne sur un dépôt mirroir (c'est à dire un clone intégral de vos sources) - vous ne pouvez donc pas l'utiliser directemment dans le répertoire des sources sur lesquelles vous travailliez.


Vous avez poussé vos mots de passe de base de données sur votre dépôts GIT ? Vous avez ajouté des images brutes et la taille de votre dépôt a explosé ? Erf, supprimer des données définitivement d'un dépôt GIT n'est pas une action à prendre à la légère.

  • Premièrement : parceque supprimer des fichiers peut rendre le projet instable dans des versions antérieures. S'il est nécessaire un jour de faire un rollback, votre projet pourrait ne plus être fonctionnel (car un fichier vient à manquer).
  • Deuxièmement : parceque la suppression est définitive. Avec GIT, on a beau supprimer des fichiers et en ajjouter, il est toujours possible de revenir à des versions précédentes et retomber sur nos pates. Dans ce cas précis, il n'y aura plus de backup, plus de trâces ...
  • Dernièrement : parceque ce fichier sera supprimé pour tout l'historique de votre projet. Si seule la dernière version vous embête, il ne sera pas possible de la supprimer sans supprimer les n versions antérieures.

La commande de suppression est relativement complexe :

  • Pensez à changer la variable CHEMIN-VERS-CE-QUI-DOIT-ETRE-SUPPRIME par le fichier/chemin à supprimer ;
  • Si vous souhaitez supprimer un répertoire complet, il faudra ajouter le paramètre -r à la commande git rm ;
  • Pensez à ajouter ce fichier/dossier dans votre .gitignore à l'avenir, ou tout de suite après cette action ;

En deux mots, la commande traverse toutes les versions de votre projet pour supprimer définitivement le fichier qui s'y trouve. Si le fichier était encore sur votre disque, il sera supprimé par la même occasion.

Il faudra ensuite poussez toutes ces modifications sur le dépôt. Le paramètre force est nécessaire pour réécrire tout l'historique et all pour le faire sur toutes les branches.

Vos collaborateurs doivent ensuite rebase leur projet (s'il merge les modifications, votre fichier risque de réapparaître)

Retour aux articles