Supprimer les données sensibles d'un historique GIT avec BFG Repo Cleaner

Supprimer les données sensibles d'un historique GIT avec BFG Repo Cleaner

BFG Repo-Cleaner est un outils écrit en Scala permettant de supprimer des fichiers ou textes d'un historique git comme le fait git-filter-branch mais beaucoup plus rapidement.

Installation

Télécharger la dernière version sur le site de BFG.

Exécutez BFG à l'aide de la commande suivante afin de verifier sont fonctionnement :

java -jar bfg-1.12.8.jar

Si tout ce passe bien vous aurez la liste des options possible. Si vous avez une erreur mentionnant un problème de version c'est probablement que vous n'avez pas de Java assez récente. Téléchargez et installez la dernière version de Java. Une fois installé, verifier que vous avez bien la dernière version dans votre terminal à l'aide de la commande java -version. Si ce n'est pas le cas vous devrez mettre à votre variable d'environnement JAVA_HOME :

export JAVA_HOME="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home"

Clonez votre dépôt git

Utilisez l'option --mirror afin d'avoir une copie complète du dépôt :

git clone --mirror [email protected]:acme/demo.git

Supprimer les mots de passe

Créez un fichier listant les mots de passe à supprimer. Par exemple passwords.txt :

eeD2oV8Ned8Wis5boc0
78/26K$;$Q
pek5Jac4Ni

Ce fichier doit contenir un mot de passe par ligne. Par défaut les mots de passe seront remplacés par **REMOVED**. Vous pouvez remplacer les mots de passe par un texte personnalisé en ajoutant ==> suivit du texte voulut à la fin des lignes.

Par exemple, si vos mots de passe sont dans des fichiers YML, il peut être intéressant de les remplacer par un ~.

eeD2oV8Ned8Wis5boc0==>~
78/26K$;$Q==>~
pek5Jac4Ni==>~

Lancer BFG :

java -jar bfg-1.12.8.jar --replace-text passwords.txt demo.git

La sortie console indique les fichiers impactés ainsi que les commits réécrit.

Supprimer un fichier

Si vous êtes sur Mac, vous avez surement déjà rencontré dans vos dépôt ces petits fichier .DS_Store que Mac OS laisse dans son sillage. Voici comment les supprimer complètement de votre historique GIT :

java -jar bfg-1.12.8.jar --delete-files .DS_Store demo.git

L'option accepte les wildcards pour remplacer n'importe quel caractère et les accolades pour préciser plusieurs possibilités.

Exemples

Supprimer tout les fichiers jpg :

java -jar bfg-1.12.8.jar --delete-files *.jpg demo.git :

Supprimer les fichiers id_rsa et id_dsa :

java -jar bfg-1.12.8.jar --delete-files id_{rsa,dsa} demo.git

Supprimer les fichiers jpg et png

java -jar bfg-1.12.8.jar --delete-files *.{jpg,png} demo.git

Enregistrer les modifications

Une fois le processus terminer, il faut enregistrer dans le dépôt les modifications de commit que nous avons effectué grâce à la commande :

cd demo.git && git reflog expire --expire=now --all && git gc --prune=now --aggressive

Attention, BFG conservant l'état de vos branche à leur dernier commit, toutes le modification seront alors reportées sur le dernier commit de chaque branche. Pour appliquer définitivement les modifications vous devrez amender ce dernier commit.

Push

Il faut ensuite pousser le nouvel arbre sur le dépôt distant :

git push

Attention, l'arbre des commits ayant été modifié, vos collaborateur ne pourront pas faire un simple git pull pour mettre à jour leur dépôt local. Le plus simple sera pour eux de supprimer leur dépôt et de le cloner à nouveau.

Les commentaires