Alors que je travaillais sur mon projet Vue et Supabase Boilerplate, j’ai ajouté de nombreuses fonctionnalités.
J’ai eu besoin à un moment d’un script pour supprimer toute branche locale qui ne s’appelait pas « main » ou « develop », qui n’était pas une branche précédemment fusionnée ou qui n’avait pas d’équivalent distant.
Oui, ce qui suit supprimera toutes les branches que vous avez créées et qui n’ont pas encore été poussées sur le référentiel distant ⚠️. Soyez donc prudent et lancez toujours le script sans l’option -D.
Voyons comment accélérer le processus de nettoyage.
Le script Bash
J’adore les scripts bash pour effectuer de petites tâches comme celle-ci. Grâce à eux, vous pouvez accomplir beaucoup de choses sans avoir besoin d’un nouveau logiciel ou service.
À l’aide de Git Bash, fourni par défaut avec Git, vous pouvez exécuter la commande suivante :
|
|
Petite mise en garde concernant les anciennes branches distantes
Si vous exécutez le script et que vous avez supprimé des branches distantes, par exemple après la finalisation d’une PR, vous remarquerez peut-être que certaines branches sont signalées comme « Branche distante existante pour a-branch », alors qu’elles n’existent plus.
Que se passe-t-il ?
Fonctionnement des références distantes
Les branches avec un suivi de leur équivalent distant sont des références locales qui représentent l’état des branches dans votre référentiel distant. Elles agissent comme des signets pour se souvenir de l’emplacement des branches distantes lors de votre dernière synchronisation (voir la documentation Git).
Lorsque quelqu’un supprime une branche sur le serveur distant, votre référentiel local ne supprime pas automatiquement sa référence à cette branche tant que vous ne l’avez pas explicitement supprimée (pour en savoir plus sur la suppression de branches, consultez cet article ou ce qui suit).
Git stocke ces références localement dans votre répertoire .git/refs/remotes/ (ou dans le fichier .git/packed-refs pour un stockage optimisé), tandis que vos paramètres de configuration à distance sont conservés dans .git/config. Ils sont gérés séparément de l’état réel du référentiel distant.
C’est en raison de cette séparation que vous devez explicitement demander à Git de nettoyer ces références lorsqu’elles deviennent obsolètes.
Mise à jour des références distantes
Il existe plusieurs façons de mettre à jour ces références obsolètes :
-
Avec
git fetch avec prune1 2 3git fetch --prune # Version abrégée git fetch -pCette commande récupère les mises à jour du dépôt distant et supprime toutes les références de suivi distant qui n’existent plus sur le dépôt distant.
-
Avec
git remote prune1git remote prune originCette commande supprime spécifiquement les branches de suivi à distance obsolètes sans récupérer les nouvelles mises à jour.
-
Activation de l’élagage automatique
1git config --global fetch.prune trueCe paramètre garantit que vos références de branches distantes restent propres sans intervention manuelle.
Conclusion
Il ne vous reste plus qu’à créer un fichier clean-git-local-branches.sh à la racine de votre dépôt et à l’exécuter.
|
|
Ensuite, une fois que vous êtes satisfait du test, exécutez le script avec -D pour supprimer réellement les branches locales.
Suivez-moi !
Merci d’avoir lu cet article. Assurez-vous de me suivre sur X, de vous abonner à ma publication Substack et d’ajouter mon blog à vos favoris pour ne pas manquer les prochains articles.
Photo de Francesco Ungaro.