Last active
August 29, 2015 14:27
-
-
Save cathal/8b89884aa0f92c2f0133 to your computer and use it in GitHub Desktop.
PS1 prompt that includes git branch + colour code for committed/uncommitted changes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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