Created — forked from halbtuerke/gist:31934

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

Show Git dirty status in your Unix bash prompt (symbols not compatible with CygWin)

View gist:47267
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
RED="\[\033[0;31m\]"
YELLOW="\[\033[0;33m\]"
GREEN="\[\033[0;32m\]"
BLUE="\[\033[0;34m\]"
LIGHT_RED="\[\033[1;31m\]"
LIGHT_GREEN="\[\033[1;32m\]"
WHITE="\[\033[1;37m\]"
LIGHT_GRAY="\[\033[0;37m\]"
COLOR_NONE="\[\e[0m\]"
 
function parse_git_branch {
 
git rev-parse --git-dir &> /dev/null
git_status="$(git status 2> /dev/null)"
branch_pattern="^# On branch ([^${IFS}]*)"
remote_pattern="# Your branch is (.*) of"
diverge_pattern="# Your branch and (.*) have diverged"
if [[ ! ${git_status} =~ "working directory clean" ]]; then
state="${RED}"
fi
# add an else if or two here if you want to get more specific
if [[ ${git_status} =~ ${remote_pattern} ]]; then
if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
remote="${YELLOW}"
else
remote="${YELLOW}"
fi
fi
if [[ ${git_status} =~ ${diverge_pattern} ]]; then
remote="${YELLOW}"
fi
if [[ ${git_status} =~ ${branch_pattern} ]]; then
branch=${BASH_REMATCH[1]}
echo " (${branch})${remote}${state}"
fi
}
 
function prompt_func() {
previous_return_value=$?;
# prompt="${TITLEBAR}$BLUE[$RED\w$GREEN$(__git_ps1)$YELLOW$(git_dirty_flag)$BLUE]$COLOR_NONE "
prompt="${TITLEBAR}${BLUE}[${RED}\w${GREEN}$(parse_git_branch)${BLUE}]${COLOR_NONE} "
if test $previous_return_value -eq 0
then
PS1="${prompt}"
else
PS1="${prompt}${RED}${COLOR_NONE} "
fi
}
 
PROMPT_COMMAND=prompt_func

I source'd this on my Mac and got gistfile1.sh: line 11: syntax error near unexpected token `{. When I opened the file in TextMate, I noticed the line endings were CRLF (Windows). I saved the file with LF and was able to execute the script. I think this may be very helpful. Thanks. See you at NFJS in Redmond!

Matthew, is this zsh friendly as well?

I have a better total-config setup for you that includes my latest ZSH derivations. It is at https://github.com/matthewmccullough/MatthewsShellConfig

btv commented

Hey, thank you for posting that. I found a different one the internet a long time ago. Posting a comment here because it's related.
https://gist.github.com/932742

Glad to have provided it and also a nod to @halbtuerke who started the bulk of this code.

This is great. Exactly what I was looking for. Really the only thing I changed (other than the prompt itself) was to clear the state variable every run. It was always saying my repo was dirty once it had been dirty. I actually just put an else and made a blue "C" for clean working state.

Update: Added number of commits ahead/behind.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.