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