Skip to content

Instantly share code, notes, and snippets.

@cathal
Last active August 29, 2015 14:27
Show Gist options
  • Save cathal/8b89884aa0f92c2f0133 to your computer and use it in GitHub Desktop.
Save cathal/8b89884aa0f92c2f0133 to your computer and use it in GitHub Desktop.
PS1 prompt that includes git branch + colour code for committed/uncommitted changes
# Customise BASH PS1 prompt to show current GIT branch, colour coded to inform user if there are any uncomitted changes.
# by Cathal Browne - http://ninjazebra.com
# Inspired by http://mediadoneright.com/content/ultimate-git-ps1-bash-prompt
### Detects if your current directory is a git repository
### If a git repository
#### Displays current branch name:
##### in green if no uncommited changes
##### in red if there are uncommitted changes
##### with a underline if there are committed changes that are not pushed to git server
##### with a § symbol beside it, if there are unpulled changes on the git server
Color_Off="\[\033[0m\]" # Text Reset
# Regular Colors
Black="\[\033[0;30m\]" # Black
Red="\[\033[0;31m\]" # Red
Green="\[\033[0;32m\]" # Green
Yellow="\[\033[0;33m\]" # Yellow
Blue="\[\033[0;34m\]" # Blue
Purple="\[\033[0;35m\]" # Purple
Cyan="\[\033[0;36m\]" # Cyan
White="\[\033[0;37m\]" # White
# Bold
BBlack="\[\033[1;30m\]" # Black
BRed="\[\033[1;31m\]" # Red
BGreen="\[\033[1;32m\]" # Green
BYellow="\[\033[1;33m\]" # Yellow
BBlue="\[\033[1;34m\]" # Blue
BIPurple="\[\033[1;35m\]" # Purple
BCyan="\[\033[1;36m\]" # Cyan
BWhite="\[\033[1;37m\]" # White
# Underline
UBlack="\[\033[4;30m\]" # Black
URed="\[\033[4;31m\]" # Red
UGreen="\[\033[4;32m\]" # Green
UYellow="\[\033[4;33m\]" # Yellow
UBlue="\[\033[4;34m\]" # Blue
UPurple="\[\033[4;35m\]" # Purple
UCyan="\[\033[4;36m\]" # Cyan
UWhite="\[\033[4;37m\]" # White
# Background
On_Black="\[\033[40m\]" # Black
On_Red="\[\033[41m\]" # Red
On_Green="\[\033[42m\]" # Green
On_Yellow="\[\033[43m\]" # Yellow
On_Blue="\[\033[44m\]" # Blue
On_Purple="\[\033[45m\]" # Purple
On_Cyan="\[\033[46m\]" # Cyan
On_White="\[\033[47m\]" # White
# High Intensty
IBlack="\[\033[0;90m\]" # Black
IRed="\[\033[0;91m\]" # Red
IGreen="\[\033[0;92m\]" # Green
IYellow="\[\033[0;93m\]" # Yellow
IBlue="\[\033[0;94m\]" # Blue
IPurple="\[\033[0;95m\]" # Purple
ICyan="\[\033[0;96m\]" # Cyan
IWhite="\[\033[0;97m\]" # White
# Bold High Intensty
BIBlack="\[\033[1;90m\]" # Black
BIRed="\[\033[1;91m\]" # Red
BIGreen="\[\033[1;92m\]" # Green
BIYellow="\[\033[1;93m\]" # Yellow
BIBlue="\[\033[1;94m\]" # Blue
BIPurple="\[\033[1;95m\]" # Purple
BICyan="\[\033[1;96m\]" # Cyan
BIWhite="\[\033[1;97m\]" # White
# High Intensty backgrounds
On_IBlack="\[\033[0;100m\]" # Black
On_IRed="\[\033[0;101m\]" # Red
On_IGreen="\[\033[0;102m\]" # Green
On_IYellow="\[\033[0;103m\]" # Yellow
On_IBlue="\[\033[0;104m\]" # Blue
On_IPurple="\[\033[10;95m\]" # Purple
On_ICyan="\[\033[0;106m\]" # Cyan
On_IWhite="\[\033[0;107m\]" # White
user="\u"
host="\h"
path="\w"
divider="$"
at="@"
spacer=" "
new_line="\n\r"
export PS1=$BIRed$user$BIGreen$at$BIYellow$host$spacer$BICyan$path'$(git branch &>/dev/null
if [ "$?" = "0" ]; then
git fetch origin &>/dev/null
branch_name=$(git symbolic-ref -q HEAD)
branch_name=${branch_name##refs/heads/}
branch_name=${branch_name:-HEAD}
unpushed_local_changes=`git log --oneline origin/$branch_name..$branch_name`
branch_name_color="'$BWhite'"
echo "$(echo `git status` | grep "nothing to commit" > /dev/null 2>&1
if [ "$?" = "0" ]; then
if [ "$unpushed_local_changes" != "" ]; then
branch_name_color="'$UGreen'"
else
branch_name_color="'$Green'"
fi
else
if [ "$unpushed_local_changes" != "" ]; then
branch_name_color="'$URed'"
else
branch_name_color="'$Red'"
fi
fi
unpulled_commits_marker=""
unpulled_commits=`git log HEAD..origin/$branch_name --oneline`
if [ "$unpulled_commits" != "" ]; then
unpulled_commits_marker="'$Purple$spacer'§"
fi
echo "'$spacer$BWhite'[$branch_name_color$branch_name$unpulled_commits_marker'$Color_Off$BWhite']"
)"
fi
)'$spacer$BWhite$divider$White$spacer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment