Mon prompt et git
Indiquer l'état du dépôt git dans le répertoire courant par un simple code de couleur, c'est très pratique. Exemple :
herve@vaio:/var/www/html/herverenault.fr/miscellanées (master) $
Ce master
marron m'indique qu'il y a des modifs sur ma branche. Pour cela, j'utilise ce script de Mike Stewart que j'ai modifié à mon goût :
#!/bin/bash Normal='\['$( tput sgr0 )'\]' Yellow='\['$( tput setaf 3 )'\]' Blue='\['$( tput setaf 6 )'\]' Bold='\['$( tput bold )'\]' PS1=$Bold'\u@\h'$Normal':\w$( git branch >/dev/null 2>&1 if [ $? -eq 0 ]; then git status | grep "rien à valider" >/dev/null if [ $? -eq 0 ]; then # Dépôt propre, couleur : bleu comme un ciel pur echo -n '$Blue' else # Dépôt sale, couleur : euh... echo -n '$Yellow' fi echo "$( __git_ps1 " (%s) " )'$Normal'" # else pas de dépôt fi )$ ' # If this is an xterm set the title to user@host:dir case "$TERM" in xterm*|rxvt*) PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" ;; *) ;; esac
J'aime sa simplicité mais le problème c'est qu'il bloque l'affichage du prompt lorsqu'on est dans un gros répertoire git, le temps qu'il exécute git status
. Bien sûr, cela ne se produit plus quand le système a mis en cache les données du git status
. Sauf que quand on revient dans le répertoire après avoir passé un peu de temps à faire autre chose, le cache du système ne contient plus ces données, et on attend de nouveau pendant le git status
(qui s'exécute à chaque nouvelle ligne de commande dans le terminal).
J'ai donc fait en sorte d'être seulement averti quand j'arrive dans un répertoire qui fait partie d'un dépôt git, grâce à ces deux lignes dans mon .bashrc
:
alias gp='source ~/scripts/git-prompt.sh' PS1='\['$( tput bold )'\]\u@\h\['$( tput sgr0 )'\]:\w\['$( tput bold )'\]$( __git_ps1 " (%s) " )\['$( tput sgr0 )'\]$ '
Ce qui me donne, quand j'arrive dans le même répertoire dans un nouveau terminal :
herve@vaio:/var/www/html/herverenault.fr/miscellanées (master) $
Ensuite, selon ce que je viens y faire, une modif ou un simple ls par exemple, je peux lancer mon prompt git avec l'alias gp
ou pas.