GIT : comment effacer les branches locales détachées d’origin

Au travail, avec la validation de pull request a pour conséquence d’avoir plein de branches sur son poste qui sont détachées d’origin. Et comme je suis un maniaque, le genre à vider la corbeille de windows dès qu’il y a un fichier dedans, je supprimais de mon poste les branches dès que je voyais qu’elles étaient détachées d’origin. Mais comme en plus je n’aime pas perdre mon temps dans des tâches à faible valeurs ajoutées, je me suis outillé d’un petit script powershell qui fait le travail pour moi.

/!\ ATTENTION /!\ WARNING /!\ ACHTUNG /!\

Ce script ne doit être exécuté que par des personnes ayant compris le script. Nul autre que le lanceur du script ne pourra être tenu responsable d’effet indésirable dudit script.

Prérequis

  • powershell
  • git
  • des dépôts git ayant une branche develop

Le script

Get-ChildItem -Path LE_CHEMIN_VERS_LES_SOURCES -Directory -Force -ErrorAction SilentlyContinue |
    Select-Object  -ExpandProperty FullName | 
    ForEach-Object { 
        Write-Host "Cleaning $_" 
        Set-Location -Path $_
        # fetch data
        git fetch --progress --prune --recurse-submodules=no origin
        # switch to develop branch
        git checkout develop
        # pull to get latest change
        git pull
        # remove gone branch
        git for-each-ref --format '%(refname:short) %(upstream:track)' HEAD refs/heads/ |  Where-Object {$_ -match '\[gone\]'} | ForEach-Object {$_ -replace '\s+\[gone\]$','' } | ForEach-Object { git branch -D $_ }        
    }

Le script va récupérer tous les répertoires du répertoire dont le chemin est LE_CHEMIN_VERS_LES_SOURCES puis pour chaque élément effectuer les opérations qui suivent :

  • get fetch : pour être à jour
  • get checkout develop : se placer sur la branche develop
  • git pull : pour récupérer la dernière version de develop (ce n’est pas forcément nécessaire mais quite à lancer un script autant se mettre à jour)
  • git for-each-ref –format ‘%(refname:short) %(upstream:track)’ HEAD refs/heads/ |  Where-Object {$_ -match  »} | ForEach-Object {$_ -replace ‘\s+$’, » } | ForEach-Object { git branch -D $_ } : qui va récuperer les branches détachées puis les supprimer.

Ce petit script marche bien pour moi, libre à vous de vous en inspirer pour vous outiller le mieux possible.

(Note: Article originellement posté sur pprb.dev)

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.