19 mai 2023

git: renommer master en main

Il est à la mode dans le monde git de renommer la branche historique 'master' en 'main'. D’ailleurs tous les services d'hébergement de git (BitBucket, GitHub, GitLab ...) nomment la branche par défaut des nouveaux repos 'main'. Voici comment effectuer cette migration techniquement inutile.

NB: Pour ceux et celles qui ont un MASTER (diplôme) je ne sais pas comment on fait, ni pour ceux qui roulent en Renault Master...


A) Celui (ou celle ...) qui a la responsabilité de faire la conversion des anciens repos devra exécuter les commandes suivantes pour chaque repo :

# S'il/elle n'a pas déjà une copie du repo à migrer il devra le cloner :
  $ git clone git@gitmachin.org:<user>/<repo>.git
  $ cd <repo>


# S'il/elle a déjà une copie :
  $ cd <repo>
  $ git checkout master

# Vérifier que l'on est bien par sur 'master'
  $ git status
  On branch master
  Your branch is up to date with 'origin/master'.

# Renommer localement 'master' en 'main' (ou tout autre nom qui ne choque la sensibilité de personne ...)
  $ git branch -m master main
  $ git status
  On branch main
  Your branch is up to date with 'origin/master'

# Pusher cette nouvelle branche sur 'origin' et la lier a origin/main(--set-upstream ou -u )
  $ git push --set-upstream origin main

Aller sur l’interface web de gitmachin et déclarer que 'main' est la nouvelle branche par défaut.
Sans cela l’étape suivante échouera.

# Supprimer de 'origin' la branche 'master'
  $ git push origin --delete master
      
# Vérifier
  $ git status
  On branch main
  Your branch is up to date with 'origin/main'.

 

NOTE: L'interface web des principaux hébergeurs de git propose de 

  • créer une nouvelle branche
  • modifier la branche par défaut
  • supprimer une branche (qui n'est pas celle par défaut)

Il est donc possible d'effectuer l’étape (A) uniquement avec la souris.


B) Tous les autres utilisateurs de ce repo devront exécuter ceci :

# S'assurer d’être sur la branche locale 'master'
  $ git checkout master


# Renommer localement de 'master' en 'main' (ou tout autre nom choisi à l’étape précédente)
  $ git branch -m master main

# Récupérer l'état actuel d'origin (ce qui inclue la nouvelle branche 'main')
  $ git fetch

# Supprimer le tracking de la branche distante 'master' qui n'existe plus.
  $ git branch --unset-upstream


# Lier la branche locale actuelle a origin/main
  $ git branch --set-upstream-to=origin/main

 

NOTE: Dans ce contexte, si vous utilisez Git 2.38 (Juillet 2020) une bonne pratique pour les repo créés localement est d’exécuter ceci :

$ git config --global init.defaultBranch main