Linux – Afficher la branche Git dans le prompt
Sommaire
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="\u@\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 :
- \u@\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 ! 😉
Merci pour l’article.
Je faisais ça auparavant, puis je suis passé sur zsh avec Oh my Zsh: https://ohmyz.sh/
Pas encore testé, mais il me fait de l’œil depuis quelques mois. Je vais prendre un moment pour creuser ça 🙂
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\]`.
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.