Comment afficher la branche git avec des couleurs dans l'invite Bash?

110

J'utilise ce guide pour afficher le nom de la branche dans le terminal gnome (Ubuntu 15.10) lorsque je travaille dans un référentiel git. Sur la base de ce qui précède, j'ai maintenant le texte ci-dessous dans mon fichier ~ / .bashrc:

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes 

...

# Add git branch if its present to 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, je reçois maintenant:

entrez la description de l'image ici

alors ça marche . Mais pourquoi la coloration de mon utilisateur @ hôte a-t-elle été supprimée? Et je m'attendrais aussi à ce que le nom de la branche soit coloré. Avant cela ressemblait à ceci:

entrez la description de l'image ici

UPDATE: 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 marche:

entrez la description de l'image ici

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

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

Je n'ai pas encore trouvé la raison pour laquelle cet extrait donne le résultat correct et non la version précédente. Des commentaires à ce sujet?

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

http://pastebin.com/M8kjEiH3

u123
la source
A été force_color_promptdécommenté avant?
Muru
Oui, j'ai essayé avec les deux résultats non commentés et commentés. Le guide affiché ci-dessus indique que cela devrait être commenté.
u123
Pouvez-vous poster votre complet .bashrc? Par défaut, IIRC .bashrcn'active pas les invites de couleur, vous devez donc le changer pour afficher les couleurs. Cela dépend de ce que vous avez changé.
Muru
1
Jetez un coup d'œil à la ligne 64, qui devrait vous expliquer pourquoi le force_color_promptfait de ne pas commenter n'a pas aidé.
Muru
2
@ u123 ne vous inquiétez pas .bashrctrop de la valeur par défaut . Si vous vous trompez, vous pouvez toujours obtenir l'original de /etc/skel/.bashrc.
Muru

Réponses:

125

Cet extrait:

# Add git branch if its present to 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 d'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 que .bashrcvous avez posté montre que vous l'ajoutez après la définition d'invite par défaut et unset color_prompt force_color_prompt(ligne 64).

Soit remplacer la définition d'invite par défaut avec l'extrait ou laisser votre ~/.bashrctel qu'il est et commenter la définition d'invite par défaut ainsi que unset color_prompt force_color_promptsur la ligne n ° 64:


Donc, une partie de votre .bashrc pourrait ressembler à

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
# THE SIX LINES BELOW are the default prompt and the unset (which were in the original .bashrc)
#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

capture d'écran

kos
la source
Vérifié ce qui précède et vous avez raison. Je vais m'en tenir à la nouvelle version de snippet car cela fonctionne sans avoir à modifier les parties par défaut du fichier bashrc.
u123
1
il ne parvient pas à ajouter de la couleur au nom de la branche.
Avinash Raj
@AvinashRaj Testez-le avec une copie de la valeur ~/.bashrcpar défaut dans /etc/skel/.bashrc, vous pourriez avoir quelque chose qui interfère dans votre ~/.bashrc.
Kos
un-comment force_color_prompt = yes (ligne n ° 48) si les couleurs ne sont pas visibles.
Adil Abbasi
1
Pour colorer votre branche en fonction de son statut, vous pouvez utiliser le script natif d' invite git fourni par git lui-même.
Niket Pathak
61

Ubuntu: affichez le nom de votre branche sur votre terminal

Ajoutez ces lignes dans votre fichier ~ / .bashrc

# Show git branch name
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
Sam
la source
5
Cela a fonctionné pour moi le 18.04!
cbloss793
1
Merci. Utiliser: Ubuntu 18.04.1 LTS
Bishwas Mishra
Cela a également fonctionné pour moi sur elementaryOS 0.4 Loki. Aussi simple que d'ouvrir mon ~ / .bashrc avec la commande sudo nano ~/.bashrc, copiez votre code à la fin du fichier, enregistrez-le, quittez et rechargez le fichier ~ / .bashrc avec le code que vous avez collé ci-dessus. Merci beaucoup;)
Juan Gómez Carrillo
Fonctionne sur Redhat 6.8!
BeeGee
1
Cela a fonctionné et gardé les couleurs! (Ubuntu 18.04)
warkentien2
10

Pour le moment, j’ai suivi cette https://gist.github.com/eliotsykes/47516b877f5a4f7cd52f et je l’ai aimé, jusqu’à présent, bien que j’ai l’intention de le personnaliser davantage.

Dans le terminal

mkdir ~/.bash

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

A l'intérieur ~/.bashrcou ~/.bash_profile(choisissez le fichier dans lequel vous mettez normalement les personnalisations / configurations bash), ajoutez les lignes:

source ~/.bash/git-prompt.sh # Show git branch name at command prompt
export GIT_PS1_SHOWCOLORHINTS=true # Option for git-prompt.sh to show branch name in color

# Terminal Prompt:
# Include git branch, use PROMPT_COMMAND (not PS1) to get color output (see git-prompt.sh for more)
export PROMPT_COMMAND='__git_ps1 "\w" "\n\\\$ "' # Git branch (relies on git-prompt.sh)

Tant que vous vous trouvez dans un dépôt Git, votre invite Bash devrait maintenant afficher la branche git actuelle en couleur, ce qui signifie qu'elle contient des modifications non validées.

typelogic
la source
facile et efficace!
Dani
Cela devrait être la réponse acceptée, car elle est claire, concise et fait le travail, et cela fonctionne aussi sur d'autres plates-formes.
miguelmorin
2

Aller au dossier d'accueil

cliquez sur Ctrl+ hpour afficher les fichiers cachés.

Ouvert . bashrcfichier et à la fin coller le suivant:

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

Si votre terminal est ouvert, fermez-le et rouvrez-le. Prendre plaisir!!

webtechnelson
la source
Bonjour, je l'ai essayé et cela ne fonctionne que si je change de superutilisateur, pouvez-vous me dire comment l'activer toujours?
Denis Stephanov
0

Mon problème était que je n'avais pas activé l'option

Exécuter la commande en tant que shell de connexion dans

TerminalÉditionPréférences de profilCommande

Joker
la source
0

remplacer

parse_git_branch

avec

parse_git_branch 2>/dev/null

dans votre définition de PS1 et vivez heureux pour toujours.

Andrej
la source
0

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\]\$ '
Nardele Salomon
la source