Afficher la branche Git et l'état dans l'invite de Bash
Personnalisation de l'invite Bash pour un contexte Git instantané
Un prompt bash bien configuré affichant des informations sur les dépôts git (https://www.glukhov.org/fr/post/2025/12/adding-git-repo-details-to-bash-prompt/ “prompt bash affichant des informations sur les dépôts git”) peut considérablement améliorer votre flux de travail de développement.
Au lieu d’exécuter constamment les commandes git status et git branch, vous pouvez avoir ces informations critiques toujours visibles dans votre invite de terminal.

Exemple de prompt Oh-my-push.
Pourquoi ajouter des informations Git à votre invite Bash ?
Lorsque vous travaillez avec plusieurs dépôts git et branches tout au long de la journée, le changement de contexte devient une source importante de perte de productivité. Une invite consciente de git résout plusieurs problèmes courants :
- Prévient la confusion des branches : Vous saurez toujours sur quelle branche vous vous trouvez avant de faire un commit
- Réduit la surcharge des commandes : Pas besoin d’exécuter constamment
git statusetgit branch - Retour visuel immédiat : Voyez les modifications non commitées, les fichiers non suivis et l’état amont en un coup d’œil
- Moins d’erreurs : Évitez de commiter accidentellement sur la mauvaise branche ou de pousser du code sale
Comprendre la variable PS1 de Bash
L’invite bash est contrôlée par la variable d’environnement PS1. Cette variable peut contenir :
- Texte littéral : N’importe quel caractère que vous souhaitez afficher
- Séquences d’échappement : Codes spéciaux commençant par
\qui affichent des informations dynamiques - Substitution de commande : Commandes dans
$(...)qui s’exécutent et affichent leur sortie - Codes de couleur ANSI : Séquences d’échappement qui changent les couleurs du texte
Les séquences d’échappement PS1 courantes incluent :
\u- nom d’utilisateur actuel\h- nom d’hôte\w- répertoire de travail actuel\$-#pour root,$pour utilisateur normal\t- heure actuelle au format 24 heures
Une invite de base pourrait ressembler à : PS1='\u@\h:\w\$ ' produisant une sortie comme utilisateur@nomdohte:/chemin/vers/rep$. Pour plus de fondamentaux bash et de séquences d’échappement, consultez notre Fiche de triche Bash complète.
Méthode 1 : Utilisation du script git-prompt.sh intégré de Git
Les distributions Git incluent un script d’aide appelé git-prompt.sh qui fournit la fonction __git_ps1. Il s’agit de l’approche la plus fiable et la plus riche en fonctionnalités.
Localisation de git-prompt.sh
Tout d’abord, trouvez où le script est situé sur votre système :
# Emplacements courants sur Linux
/usr/share/git-core/contrib/completion/git-prompt.sh
/etc/bash_completion.d/git-prompt
/usr/lib/git-core/git-sh-prompt
# Emplacements courants sur macOS (avec Homebrew)
/usr/local/etc/bash_completion.d/git-prompt.sh
/Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh
# Recherchez-le si nécessaire
find /usr -name git-prompt.sh 2>/dev/null
Configuration de base
Ajoutez ce qui suit à votre ~/.bashrc ou ~/.bash_profile :
# Sourcez le script git-prompt
source /usr/lib/git-core/git-sh-prompt
# Configurez votre invite pour inclure les informations git
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\[\033[01;31m\]$(__git_ps1 " (%s)")\[\033[00m\]\$ '
La partie $(__git_ps1 " (%s)") appelle la fonction, et %s est remplacé par le nom de la branche actuelle. Les espaces et parenthèses environnants le formatent joliment.
Après avoir modifié, rechargez votre configuration :
source ~/.bashrc
Options avancées de git-prompt.sh
Git-prompt.sh devient puissant lorsque vous activez ses fonctionnalités optionnelles via des variables d’environnement :
# Afficher les modifications non stagées (*) et stagées (+)
export GIT_PS1_SHOWDIRTYSTATE=1
# Afficher s'il y a des modifications mises de côté ($)
export GIT_PS1_SHOWSTASHSTATE=1
# Afficher s'il y a des fichiers non suivis (%)
export GIT_PS1_SHOWUNTRACKEDFILES=1
# Afficher la différence entre HEAD et amont
# Options : auto, verbose, name, legacy, git, svn
export GIT_PS1_SHOWUPSTREAM="auto"
# Activer les indices colorés (nécessite bash 4.0+)
export GIT_PS1_SHOWCOLORHINTS=1
# Afficher l'état du dépôt pendant les opérations
# (MERGING, REBASING, BISECTING, etc.)
export GIT_PS1_DESCRIBE_STYLE="default"
Voici ce que signifient les indicateurs :
*- Modifications non stagées (fichiers modifiés non ajoutés)+- Modifications stagées (fichiers ajoutés mais non commis)$- Des modifications mises de côté existent%- Fichiers non suivis présents<- En retard par rapport à la branche amont>- En avance par rapport à la branche amont<>- Divergé de la branche amont=- Égal à la branche amont
Exemple de configuration complète
Voici une configuration ~/.bashrc complète :
# Source git-prompt
if [ -f /usr/share/git-core/contrib/completion/git-prompt.sh ]; then
source /usr/share/git-core/contrib/completion/git-prompt.sh
fi
# Configurer les options git-prompt
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWSTASHSTATE=1
export GIT_PS1_SHOWUNTRACKEDFILES=1
export GIT_PS1_SHOWUPSTREAM="auto"
export GIT_PS1_SHOWCOLORHINTS=1
# Définitions de couleurs
COLOR_RESET='\[\033[00m\]'
COLOR_USER='\[\033[01;32m\]' # Vert
COLOR_PATH='\[\033[01;34m\]' # Bleu
COLOR_GIT='\[\033[01;33m\]' # Jaune
# Définir l'invite
PS1="${COLOR_USER}\u@\h${COLOR_RESET}:${COLOR_PATH}\w${COLOR_GIT}"'$(__git_ps1 " (%s)")'"${COLOR_RESET}\$ "
Méthode 2 : Substitution manuelle des commandes Git
Si vous n’avez pas accès à git-prompt.sh ou si vous souhaitez une solution minimale, vous pouvez exécuter directement des commandes git dans votre invite :
# Nom de la branche simple uniquement
PS1='\u@\h:\w$(git branch 2>/dev/null | grep "^*" | colrm 1 2 | sed "s/^/ (/;s/$/)/")\$ '
# Nom de la branche avec indicateur d'état
parse_git_dirty() {
[[ $(git status 2> /dev/null | tail -n1) != "nothing to commit, working tree clean" ]] && echo "*"
}
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/ (\1$(parse_git_dirty))/"
}
PS1='\u@\h:\w\[\033[01;33m\]$(parse_git_branch)\[\033[00m\]\$ '
Cette approche est plus portable mais manque de sophistication par rapport à git-prompt.sh et peut être plus lente dans les grands dépôts.
Méthode 3 : Outils de prompt modernes
Pour une expérience plus riche avec une configuration minimale, envisagez ces alternatives modernes :
Starship Prompt
Starship est un prompt rapide et personnalisable écrit en Rust qui fonctionne avec plusieurs shells (bash, zsh, fish, PowerShell).
# Installer Starship
curl -sS https://starship.rs/install.sh | sh
# Ajouter à ~/.bashrc
eval "$(starship init bash)"
Starship détecte automatiquement les dépôts git et affiche :
- Le nom de la branche
- Le hash de commit en mode détaché
- L’état du dépôt (fusion, rébase, etc.)
- Le nombre de fichiers modifiés
- Le statut en avance/retard par rapport à l’amont
- Et bien plus avec des icônes personnalisables
Configurez-le via ~/.config/starship.toml :
[git_branch]
symbol = "🌱 "
format = "on [$symbol$branch]($style) "
[git_status]
conflicted = "🏳"
ahead = "⇡${count}"
behind = "⇣${count}"
diverged = "⇕⇡${ahead_count}⇣${behind_count}"
untracked = "🤷"
stashed = "📦"
modified = "📝"
staged = '[++\($count\)](green)'
renamed = "👅"
deleted = "🗑"
Oh My Bash
Oh My Bash est un framework pour gérer la configuration bash avec des thèmes et des plugins :
# Installer Oh My Bash
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)"
# Éditer ~/.bashrc pour définir le thème
OSH_THEME="powerline"
De nombreux thèmes Oh My Bash incluent une intégration git par défaut.
Oh My Posh
Oh My Posh est un moteur de prompt moderne, multiplateforme, qui fonctionne avec bash, zsh, PowerShell et d’autres shells. Il fournit des prompts beaux et personnalisables avec une excellente intégration git et utilise les Nerd Fonts pour le support des icônes.
Installation sur Linux
Installez Oh My Posh avec une seule commande :
# Installer dans ~/bin ou ~/.local/bin (par défaut)
curl -s https://ohmyposh.dev/install.sh | bash -s
# Ou spécifier un répertoire d'installation personnalisé
curl -s https://ohmyposh.dev/install.sh | bash -s -- -d ~/bin
Configuration de base
Ajoutez Oh My Posh à votre ~/.bashrc :
# Initialiser Oh My Posh avec un thème
eval "$(oh-my-posh init bash --config ~/.poshthemes/jandedobbeleer.omp.json)"
Installation et utilisation des thèmes
Oh My Posh inclut de nombreux thèmes préconstruits. Téléchargez-les d’abord :
# Créer un répertoire de thèmes
mkdir ~/.poshthemes
# Télécharger tous les thèmes
curl -s https://ohmyposh.dev/themes.json | \
jq -r '.[] | .url' | \
xargs -I {} sh -c 'curl -s {} -o ~/.poshthemes/$(basename {})'
Thèmes populaires :
jandedobbeleer.omp.json- Le thème personnel du créateur avec une intégration git complètepowerline.omp.json- Style powerline classiqueatomic.omp.json- Minimaliste avec les informations essentiellesnight-owl.omp.json- Thème riche en couleurs avec des détails git étendus
Changez de thème en modifiant le chemin de configuration :
eval "$(oh-my-posh init bash --config ~/.poshthemes/atomic.omp.json)"
Fonctionnalités Git
Oh My Posh affiche automatiquement des informations git complètes :
- Le nom de la branche actuelle
- Le nombre de commits en avance/retard par rapport au dépôt distant
- L’état du répertoire de travail (propre/sale)
- Le nombre de stashes
- L’état de fusion/rébase
- Les informations de tag
- Le hash de commit en mode HEAD détaché
Configuration personnalisée
Créez un thème personnalisé en copiant un thème existant :
# Copier un thème comme point de départ
cp ~/.poshthemes/jandedobbeleer.omp.json ~/.mytheme.omp.json
# Éditer votre thème
nano ~/.mytheme.omp.json
# Utiliser votre thème personnalisé
eval "$(oh-my-posh init bash --config ~/.mytheme.omp.json)"
Exemple de configuration de segment git en JSON :
{
"type": "git",
"style": "powerline",
"powerline_symbol": "",
"foreground": "#193549",
"background": "#fffb38",
"background_templates": [
"{{ if or (.Working.Changed) (.Staging.Changed) }}#FF9248{{ end }}",
"{{ if and (gt .Ahead 0) (gt .Behind 0) }}#ff4500{{ end }}",
"{{ if gt .Ahead 0 }}#B388FF{{ end }}",
"{{ if gt .Behind 0 }}#B388FF{{ end }}"
],
"properties": {
"fetch_status": true,
"fetch_upstream_icon": true,
"branch_icon": " ",
"branch_max_length": 25,
"truncate_symbol": "…"
}
}
Exigences de police
Oh My Posh fonctionne mieux avec Nerd Fonts pour le support des icônes :
# Télécharger et installer une Nerd Font (exemple : FiraCode)
mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts
curl -fLo "FiraCode Nerd Font.ttf" \
https://github.com/ryanoasis/nerd-fonts/raw/HEAD/patched-fonts/FiraCode/Regular/FiraCodeNerdFont-Regular.ttf
fc-cache -fv
Ensuite, configurez votre terminal pour utiliser la Nerd Font.
Avantages d’Oh My Posh
- Multiplateforme : Même configuration fonctionne sur Linux, macOS et Windows
- Rapide : Écrit en Go pour des performances optimales
- Extensible : Segments modulaires pour git, heure, chemin, langages, fournisseurs de cloud, etc.
- Thèmes riches : Grande collection de thèmes prédéfinis
- Développement actif : Mises à jour et améliorations régulières
- Agnostique du terminal : Fonctionne dans tout terminal compatible ANSI
Bash-git-prompt
Un outil de prompt bash dédié axé sur les informations git :
# Cloner le dépôt
git clone https://github.com/magicmonty/bash-git-prompt.git ~/.bash-git-prompt --depth=1
# Ajouter à ~/.bashrc
if [ -f "$HOME/.bash-git-prompt/gitprompt.sh" ]; then
GIT_PROMPT_ONLY_IN_REPO=1
source $HOME/.bash-git-prompt/gitprompt.sh
fi
Considérations de performance dans les grands dépôts
Les opérations de statut git peuvent être lentes dans les grands dépôts. Voici des stratégies d’optimisation :
Désactiver sélectivement les fonctionnalités coûteuses
# Dans .bashrc, désactiver conditionnellement les fonctionnalités pour les grands dépôts
if [ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then
repo_size=$(du -sh .git 2>/dev/null | cut -f1)
# Désactiver la vérification de l'état sale pour les dépôts de plus de 100MB
if [[ "$repo_size" =~ ^[0-9]+M$ ]] && [ "${repo_size%M}" -gt 100 ]; then
export GIT_PS1_SHOWDIRTYSTATE=0
fi
fi
Utiliser les options de configuration git
Configurez git pour optimiser les vérifications de statut :
# Activer le moniteur de système de fichiers pour des vérifications de statut plus rapides
git config core.fsmonitor true
git config core.untrackedCache true
# Pour les très grands dépôts, envisager les clones partiels
git config core.commitGraph true
git config gc.writeCommitGraph true
Alternative : Prompts asynchrones
Des outils comme Starship utilisent des opérations asynchrones pour éviter les retards du prompt. Le prompt se met à jour après la récupération des informations git, plutôt que de bloquer.
Dépannage des problèmes courants
Le prompt n’affiche pas les informations git
- Vérifiez que git-prompt.sh est chargé : Exécutez
type __git_ps1dans votre terminal. Si cela indique “non trouvé”, le script n’est pas chargé. - Vérifiez les permissions des fichiers : Assurez-vous que git-prompt.sh est lisible :
ls -l /path/to/git-prompt.sh - Vérifiez que vous êtes dans un dépôt git : Exécutez
git statuspour confirmer - Vérifiez la syntaxe de PS1 : Assurez-vous que
$(__git_ps1)est inclus et correctement quoted
Les couleurs ne s’affichent pas
- Problèmes de séquences d’échappement : Les couleurs dans PS1 doivent être entourées de
\[ \]pour éviter les problèmes de retour à la ligne - Support du terminal : Vérifiez que votre terminal prend en charge les couleurs ANSI :
echo -e "\033[31mTexte rouge\033[0m" - Codes de réinitialisation : Terminez toujours les séquences de couleurs avec le code de réinitialisation
\033[00m
Le prompt brise le retour à la ligne
Lorsque vous utilisez des couleurs, les séquences non imprimables doivent être entourées de \[ et \] :
# Incorrect - provoque des problèmes de retour à la ligne
PS1="\033[32m\u\033[00m\$ "
# Correct
PS1="\[\033[32m\]\u\[\033[00m\]\$ "
Prompt lent dans WSL ou sur des lecteurs réseau
Les opérations git sur les partages réseau Windows ou WSL peuvent être lentes :
# Désactiver les fonctionnalités coûteuses de git-prompt sur les systèmes de fichiers lents
export GIT_PS1_SHOWDIRTYSTATE=0
export GIT_PS1_SHOWUNTRACKEDFILES=0
Envisagez d’utiliser le bash git natif de Windows au lieu de WSL pour les dépôts sur les lecteurs Windows.
Intégration avec les flux de travail de développement
Un prompt conscient de git devient encore plus puissant lorsqu’il est combiné avec d’autres améliorations de shell :
Alias git pour une navigation rapide
Combinez votre prompt amélioré avec des alias git utiles pour maximiser l’efficacité. Pour une liste complète des commandes git et raccourcis, consultez notre Fiche de triche des commandes GIT.
# Ajouter à ~/.gitconfig ou ~/.bashrc
alias gs='git status'
alias gb='git branch'
alias gc='git checkout'
alias gp='git pull'
alias gpu='git push'
Comportement de prompt conditionnel
# Couleurs de prompt différentes pour différents états
__git_ps1_colorize() {
local git_status="$(git status 2>/dev/null)"
if [[ $git_status =~ "nothing to commit" ]]; then
echo -e "\[\033[32m\]" # Vert pour propre
else
echo -e "\[\033[31m\]" # Rouge pour sale
fi
}
PS1='\u@\h:\w$(__git_ps1_colorize)$(__git_ps1 " (%s)")\[\033[00m\]\$ '
Intégration de la barre de titre du terminal
Mettez à jour le titre du terminal avec les informations du dépôt :
PROMPT_COMMAND='echo -ne "\033]0;${PWD##*/}$(__git_ps1 " [%s]")\007"'
Bonnes pratiques et recommandations
- Gardez-le lisible : Ne surchargez pas votre prompt avec trop d’informations
- Utilisez les couleurs stratégiquement : Différentes couleurs pour différents états (propre vs sale)
- Testez dans plusieurs scénarios : Vérifiez que le prompt fonctionne dans les répertoires normaux, les dépôts git et pendant les opérations git
- Documentez votre configuration : Commentez votre .bashrc pour vous souvenir de ce que fait chaque partie
- Sauvegardez votre configuration : Versionnez vos fichiers de configuration dans un dépôt git. Si vous exécutez votre propre serveur git, vous pourriez vouloir explorer Installation du serveur Gitea comme une option légère auto-hébergée
- Pensez à votre flux de travail : Activez uniquement les fonctionnalités dont vous avez réellement besoin
- Utilisez des outils modernes lorsque possible : Starship et outils similaires sont bien testés et performants
Pour les solutions git auto-hébergées, apprenez-en plus sur Sauvegarde et restauration de Gitea pour assurer la protection de vos dépôts. Si vous êtes intéressé par l’automatisation de vos flux de travail git, explorez notre Fiche de triche GitHub Actions.
Liens utiles
- Documentation officielle de Git sur git-prompt.sh
- Site officiel de Starship Prompt
- Documentation officielle d’Oh My Posh
- Galerie des thèmes d’Oh My Posh
- Bash Hackers Wiki - Configuration de PS1
- Dépôt GitHub d’Oh My Bash
- Dépôt GitHub de bash-git-prompt
- Site officiel des Nerd Fonts
- Référence des codes ANSI Escape
- Conseils de performance Git pour les grands dépôts