209 votes

Comment puis-je afficher la branche git avec des couleurs dans l'invite de commandes Bash ?

Je suis en train d'utiliser ce guide pour afficher le nom de la branche dans le terminal gnome (Ubuntu 15.10) lorsque je travaille dans un dépôt git. En fonction de ce qui précède, j'ai maintenant ce qui suit dans mon fichier ~/.bashrc :

# décommentez pour un invite de couleur, si le terminal en a la capacité ; désactivé
# par défaut pour ne pas distraire l'utilisateur : le focus dans une fenêtre de terminal
# devrait être sur la sortie des commandes, pas sur l'invite
#force_color_prompt=yes 

...

# Ajouter la branche git si elle est présente à PS1
parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_prompt force_color_prompt

En conséquence, j'obtiens maintenant :

enter image description here

alors cela fonctionne. Mais pourquoi la coloration de mon user@host a-t-elle été supprimée ? Et je m'attendrais également à ce que le nom de la branche soit coloré. Avant, cela ressemblait à ceci :

enter image description here

MISE À JOUR : J'ai maintenant essayé ce guide à la place :

https://coderwall.com/p/fasnya/add-git-branch-name-to-bash-prompt

en ajoutant ceci à .bashrc :

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\] $ "

et ça fonctionne :

enter image description here

Remarquez dans .bashrc j'ai aussi ceci (par défaut) :

# décommentez pour un invite de couleur, si le terminal en a la capacité ; désactivé
# par défaut pour ne pas distraire l'utilisateur : le focus dans une fenêtre de terminal
# devrait être sur la sortie des commandes, pas sur l'invite
#force_color_prompt=yes

Je n'ai pas encore trouvé la raison pour laquelle ce extrait donne le résultat correct et l'autre version ne le fait pas. Des idées à ce sujet ?

Voici la version de mon .bashrc qui a l'ancien extrait activé qui ne fonctionne pas :

http://pastebin.com/M8kjEiH3

201voto

ieplugin Points 216

Ce extrait:

# Ajouter la branche git si elle est présente à PS1

parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi

Est destiné à remplacer la définition de l'invite par défaut:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

Qui se termine par:

unset color_prompt force_color_prompt

Le .bashrc que vous avez posté montre que vous l'ajoutez après la définition de l'invite par défaut et unset color_prompt force_color_prompt (ligne n°64).

Soit vous remplacez la définition de l'invite par défaut par l'extrait, soit vous laissez votre ~/.bashrc tel quel et commentez la définition de l'invite par défaut ainsi que unset color_prompt force_color_prompt à la ligne n°64:


Ainsi, une partie de votre .bashrc pourrait ressembler à ceci

parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\] $(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
# LES SIX LIGNES CI-DESSOUS sont la définition de l'invite par défaut et l'unset (qui étaient dans le .bashrc d'origine)
#if [ "$color_prompt" = yes ]; then
#    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
#else
#    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
#fi
#unset color_prompt force_color_prompt

captures d'écran

167voto

hoofa Points 11

Ubuntu: Affichez le nom de votre branche dans votre terminal

Ajoutez ces lignes dans votre fichier ~/.bashrc

# Afficher le nom de la branche git
force_color_prompt=yes
color_prompt=yes
parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_prompt force_color_prompt

Rechargez le fichier .bashrc avec cette commande:

$ source ~/.bashrc

21voto

eigenfield Points 320

À ce stade, j'ai suivi ceci https://gist.github.com/eliotsykes/47516b877f5a4f7cd52f et ça marche bien, jusqu'à présent, bien que je prévoie de le personnaliser davantage.

Dans le Terminal

mkdir ~/.bash

Copiez le fichier brut git-prompt.sh du contrib git dans le répertoire ~/.bash : https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh

À l'intérieur de ~/.bashrc ou de ~/.bash_profile (choisissez le fichier où vous mettez normalement toutes vos personnalisations/configuration bash), ajoutez les lignes suivantes :

source ~/.bash/git-prompt.sh # Afficher le nom de la branche git à l'invite de commande
export GIT_PS1_SHOWCOLORHINTS=true # Option pour git-prompt.sh d'afficher le nom de la branche en couleur

# Invite de commande Terminal :
# Inclure la branche git, utiliser PROMPT_COMMAND (pas PS1) pour obtenir une sortie en couleur (voir git-prompt.sh pour plus de détails)
export PROMPT_COMMAND='__git_ps1 "\w" "\n\\\$ "' # Branche git (dépend de git-prompt.sh)

Tant que vous vous trouvez à l'intérieur d'un dépôt git, votre invite de commandes Bash devrait maintenant afficher la branche git actuelle en couleur, indiquant si elle contient des modifications non confirmées.

9voto

cosy Points 238

Conseil rapide:

  1. Ajout de ceci dans le fichier ~/.bashrc:

    parse_git_branch() { git branch 2> /dev/null | sed -e '/^[^]/d' -e 's/ (.*)/(\1)/' }

    export PS1="\u@\h [\e[32m]\w [\e[91m]\$(parse_git_branch)[\e[00m]$ "

  2. Redémarrez le terminal, ou rechargez le fichier ~/.bashrc:

entrez la description de l'image ici

Plus de détails: https://medium.com/@thucnc/how-to-show-current-git-branch-with-colors-in-bash-prompt-380d05a24745

5voto

nardele salomon Points 51

Ajoutez les lignes ci-dessous à ~/.bashrc :

export GIT_PS1_SHOWDIRTYSTATE=true
export GIT_PS1_SHOWUNTRACKEDFILES=true

export PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X