git 1.9.3 ou version ultérieure: utilisez __git_ps1
Git fournit un script shell appelé git-prompt.sh
, qui inclut une fonction __git_ps1
qui
imprime le texte à ajouter à l'invite bash PS1 (comprend le nom de la branche)
Son utilisation la plus basique est:
$ __git_ps1
(master)
Il prend également une chaîne de format facultative:
$ __git_ps1 'git:[%s]'
git:[master]
Comment l'obtenir
Copiez d'abord le fichier quelque part (par exemple ~/.git-prompt.sh
).
Option 1: utilisez une copie existante sur votre système de fichiers. Exemple (Mac OS X 10.15):
$ find / -name 'git-prompt.sh' -type f -print -quit 2>/dev/null
/Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh
Option 2: tirez le script de GitHub .
Ensuite, ajoutez la ligne suivante à votre .bashrc/.zshrc
:
source ~/.git-prompt.sh
Enfin, changez votre PS1
appel __git_ps1
en substitution de commande:
Frapper:
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
Zsh:
setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
git <1.9.3
Mais notez que seul git 1.9.3 (mai 2014) ou version ultérieure vous permet d' afficher en toute sécurité ce nom de branche (!)
Voir commit 8976500 de Richard Hansen ( richardhansen
) :
Bash et zsh soumettent la valeur de PS1 à l' expansion des paramètres , à la substitution de commandes et à l'expansion arithmétique.
Plutôt que d'inclure le nom de branche brut et sans échappement PS1
lors de l'exécution en mode à deux ou trois arguments, construisez PS1
pour référencer une variable contenant le nom de la branche.
Étant donné que les shells ne se développent pas de manière récursive, cela évite l'exécution de code arbitraire par des noms de branche spécialement conçus tels que
'$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)'.
Quel esprit sournois nommerait une branche comme ça? ;) ( À côté d'une maman comme dans xkcd )
Plus d'exemples
rapports still_dreaming_1 dans les commentaires :
Cela semble fonctionner très bien si vous voulez une invite de couleur avec xterm
(dans mon .bashrc
):
PS1='\[\e]0;\u@\h: \w\a\]\n${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ '
Tout est d'une couleur différente, y compris la branche.
Dans Linux Mint 17.3 Cinnamon 64 bits:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[00m\]$(__git_ps1) \$ '