Prompt Bash pour GIT
04 Apr 2012J’utilise git depuis quelques mois, et je trouve ça vraiment génial. Si vous ne connaissez pas, ou peu, vous ne pouvez pas ne pas lire le livre Pro Git (sous licence cc-by-nc-sa). Les explications très claires permettent en quelques heures de maîtriser toutes les fonctions de base, et d’être à l’aise avec la gestion des branches (et bien plus encore).
Branches visibles
Le but de ce billet est de répondre à un problème particulier : par manque d’attention, il m’est arrivé plusieurs fois de commiter des changements sur une mauvaise branche (j’étais persuadé d’être sur une branche, en fait j’étais sur une autre). Ce n’est pas très grave (on peut s’en sortir), mais c’est pénible.
Je souhaiterais donc avoir le nom de la branche dans le prompt bash.
Des solutions existent déjà : le paquet git
embarque même un script
qui répond au besoin. Certains utilisent aussi des scripts
personnalisés. Mais aucun de ceux que j’ai trouvés ne me
convenait. J’ai donc écrit mon propre script.
Mes prompts
Version simple
J’ai commencé par une version simple, qui ajoute en couleur @nomdelabranche
à
la fin du prompt. Un exemple vaut mieux qu’un long discours :
rom@rom-laptop:~/dev$ cd myproject/
rom@rom-laptop:~/dev/myproject@master$ git checkout testing
Switched to branch 'testing'
rom@rom-laptop:~/dev/myproject@testing$ cd img
rom@rom-laptop:~/dev/myproject/img@testing$
Dans une arborescence ayant plusieurs projets GIT imbriqués (dans le cas de l’utilisation de sous-modules), la branche des projets parents n’est pas affichée :
rom@rom-laptop:~/dev$ cd mybigproject/
rom@rom-laptop:~/dev/mybigproject@master$ cd submodule/
rom@rom-laptop:~/dev/mybigproject/submodule@master$ git checkout exp
Switched to branch 'exp'
rom@rom-laptop:~/dev/mybigproject/submodule@exp$ cd ..
rom@rom-laptop:~/dev/mybigproject@master$
Version améliorée
Dans cette version simple, le nom de la branche est toujours affiché à la fin. Cela ne me convient pas, je le voudrais toujours à la racine du projet en question. C’est ce que permet la version améliorée.
Voici le résultat avec les mêmes commandes :
rom@rom-laptop:~/dev$ cd myproject/
rom@rom-laptop:~/dev/myproject@master$ git checkout testing
Switched to branch 'testing'
rom@rom-laptop:~/dev/myproject@testing$ cd img
rom@rom-laptop:~/dev/myproject@testing/img$
Et avec des sous-modules, la branche des projets parents est affichée :
rom@rom-laptop:~/dev$ cd mybigproject/
rom@rom-laptop:~/dev/mybigproject@master$ cd submodule/
rom@rom-laptop:~/dev/mybigproject@master/submodule@master$ git checkout exp
Switched to branch 'exp'
rom@rom-laptop:~/dev/mybigproject@master/submodule@exp$ cd ..
rom@rom-laptop:~/dev/mybigproject@master$
En image :
Script
Le script, sous licence WTFPL, est disponible sur ce dépôt git : [gitbashprompt].
Une fois cloné, éditez le fichier ~/.bashrc
pour remplacer l’initialisation de
la variable PS1
:
par :
Pour tester, ouvrir un nouveau terminal.
Conclusion
Tout d’abord, je suis content d’avoir exactement le comportement que je souhaitais pour mon git.
Ensuite, j’ai découvert le fonctionnement du prompt, avec notamment les
subtilités d’échappement de caractères de la variable PS1
et la
prise en compte des caractères de contrôle \[
et \]
.
Enfin, je me suis enfin décidé à étudier la gestion des couleurs de Bash (qui, à première vue, est assez repoussante, il faut bien l’avouer). Mes scripts seront donc plus jolis à l’avenir ;-)
Merci pour l’astuce,
Très utile