Linux – Afficher la branche Git dans le prompt

I. Présentation

Lorsqu’on utilise Git au quotidien pour versionner son code / ses scripts, on est souvent amené à créer des branches pour tester un bout de code, corriger un bug, le tout sans impacter le script actuel qui tourne en production.

Et pour éviter un carnage en production, nous devons redoubler de vigilance, et nous assurer de bien être sur la branche de test, et non celle de production.

Il existe des commandes Git pour vérifier cela, et pour naviguer d’une branche à l’autre. Mais on peut vite s’y perdre.

Et si je vous disais qu’il est possible de manipuler le prompt de votre terminal Linux pour afficher le nom de la branche de votre repository Git sur laquelle vous travaillez ?

Note : Si vous ne voyez pas encore l’intérêt en tant que sysadmin d’utiliser Git pour gérer vos scripts et la configuration de vos serveurs, laissez-moi vous convaincre du contraire : Git c’est l’avenir du sysadmin. Ça devient même un nouveau standard dont vous ne pouvez plus passer à côté.

II. Prérequis

Afin de suivre ce tutoriel, vous devez respecter les prérequis suivants :

  • Avoir une distribution Linux fonctionnelle, que ce soit une machine virtuelle, ou une distribution sous WSL
  • Git installé
  • Avoir créé votre premier repository Git

III. Comment modifier le prompt bash

Au lancement de votre terminal Linux, vous devriez avoir par défaut un prompt affichant :

  • Votre nom d’utilisateur
  • Le hostname de votre machine
  • Le répertoire dans lequel vous vous trouvez
  • Un $, indiquant que votre compte n’est pas un compte root

Le contenu de ce prompt est stocké dans une variable nommée PS1, pour Prompt String 1.

Vous pouvez d’ailleurs afficher le contenu de cette variable via la commande :

echo $PS1

Bon, on est d’accord, vu comme ça, c’est un peu moins parlant 😉

Note : Si l’anglais n’est pas un problème pour vous, je vous invite à consulter cet article pour tout savoir en détail sur la variable PS1.

Pour afficher le nom de la branche Git sur laquelle on travaille dans notre prompt, il nous faut donc modifier le contenu de cette variable PS1.

Et pour éviter de refaire la manipulation à chaque fois que l’on démarre un nouveau terminal, on va donc ajouter un bout de code à notre profile bash, en modifiant le fichier .bashrc :

vim ~/.bashrc

Note : le caractère ~ est un raccourci pour indiquer votre répertoire d’utilisateur. Dans mon cas, cela correspond à /home/thibault.

Déplacez-vous à la fin du fichier, et ajoutez le code suivant, puis sauvegardez :

# Configuration Git Branch – Modification prompt Linux
parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\[email protected]\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "

 

Avant de tester le bon fonctionnement du code, quelques explications s’imposent :

La fonction parse_git_branch va extraire le nom de la branche Git sur laquelle vous vous trouvez actuellement dans votre repository Git.

Le contenu de la variable PS1 est alors modifié pour inclure le nom de la branche Git.

Si on analyse en détail le contenu de la variable PS1, on a alors les propriétés suivantes :

  • \[email protected]\h \[\033[32m\] à Affiche le nom de l’utilisateur et le hostname de la machine, avec la couleur appropriée
  • \w\[\033[33m\] à Affiche le nom du répertoire de travail actuel. Lorsque vous changez de répertoire avec la commande cd, ce contenu change également de manière dynamique.
  • \$(parse_git_branch)\[\033[00m\] à Si le répertoire de travail est un repository Git (et seulement dans ce cas-là), alors on affiche le nom de la branche Git dans laquelle nous nous trouvons actuellement.

IV. Tester le bon fonctionnement

Maintenant pour tester ça, comment faire ? Et bien, il suffit de redémarrer votre terminal pour que la fonction que l'on vient de rajouter soit prise en compte.

Jusque là, vous ne devriez voir aucun changement. Normal après tout, puisque vous vous trouvez actuellement dans un répertoire qui n'est pas tracké par Git.

Pour vérifier le fonctionnement, je me déplace dans mon dossier repository Git "scripts", qui contient deux branches :

  • master
  • test/branch

On peut voir que lorsque j'utilise la commande git checkout pour changer de branche et me déplacer entre "master" et "test/branch", mon prompt change aussi en fonction.

 

V. Conclusion

Ainsi, on sait d’un coup d’œil si le répertoire de travail est suivi par Git ou non, et si c’est le cas, on connaît également la branche (production, développement, etc) sur laquelle on travaille.

Plus aucun risque de se tromper maintenant ! 😉

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Thibault Baheux

Responsable Infrastructure IT, Geek, Manager de geeks, Je travaille au quotidien sur une infra Cloud privée / Cloud Azure, aussi bien Windows que Linux. Je me passionne pour Azure & AWS, le DevOps, la sécurité & la programmation objet (PowerShell / Python). Si je ne suis pas derrière mon clavier, vous me trouverez dans une salle de blocs ou devant un bon mur d’escalade.

thibault-baheux has 14 posts and counting.See all posts by thibault-baheux

4 thoughts on “Linux – Afficher la branche Git dans le prompt

    • Pas encore testé, mais il me fait de l’œil depuis quelques mois. Je vais prendre un moment pour creuser ça 🙂

      Répondre
  • Merci pour ce tuto, cela faisait moment que je voulais ajouter cette info. J’avais essayé Zsh, mais cette option, ajouté par Oh my Zsh il me semble, rendait le terminal trop lent, donc je suis vite revenu en arrière sous Bash.

    En suivant le tuto, j’ai relevé une erreur, il ne faut pas échapper le caractère $ lors de l’appel de la fonction. Il faut donc tapper `$(parse_git_branch)\[\033[00m\]` au lieu de `\$(parse_git_branch)\[\033[00m\]`.

    Répondre
  • Autre petite coquille, si il ne fallait pas échapper le premier $, il faudrait par contre échapper le dernier. Même si il n’est pas impossible que ça passe car il est suivi d’un espace, mais logiquement il faudrait l’échapper avec un antislash.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

 

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