I tried adding the git branch I\'m currently working on (checked-out) on the bash prompt without success.. (while keeping my current path which shows the active dir
__git_ps1Git provides a shell script called git-prompt.sh, which includes a function __git_ps1 that
prints text to add to bash PS1 prompt (includes branch name)
Its most basic usage is:
$ __git_ps1
(master)
It also takes an optional format string:
$ __git_ps1 'git:[%s]'
git:[master]
First, copy the file to somewhere (e.g. ~/.git-prompt.sh).
Option 1: use an existing copy on your filesystem. Example (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: Pull the script from GitHub.
Next, add the following line to your .bashrc/.zshrc:
source ~/.git-prompt.sh
Finally, change your PS1 to call __git_ps1 as command-substitution:
Bash:
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
Zsh:
setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
But note that only git 1.9.3 (May 2014) or later allows you to safely display that branch name(!)
See commit 8976500 by Richard Hansen (richardhansen):
Both bash and zsh subject the value of PS1 to parameter expansion, command substitution, and arithmetic expansion.
Rather than include the raw, unescaped branch name in
PS1when running in two- or three-argument mode, constructPS1to reference a variable that holds the branch name.Because the shells do not recursively expand, this avoids arbitrary code execution by specially-crafted branch names such as
'$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)'.
What devious mind would name a branch like that? ;) (Beside a Mom as in xkcd)
still_dreaming_1 reports in the comments:
This seems to work great if you want a color prompt with
xterm(in my.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)\$ '
Everything is a different color, including the branch.
In in Linux Mint 17.3 Cinnamon 64-bit:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[00m\]$(__git_ps1) \$ '