My bash prompt with git/svn branch+status display
After spending a few hours last night switching between three different branches in the ack2 project, and typing "git br" over and over, I decided I needed to put branch status in my bash prompt. The only question was: Which one would I steal? Fortunately, Rob Hoelz was online and I mentioned it to him and he handed me his, so I stole it and also added Subversion support as well.
#!/bin/bash # Adapted from from https://github.com/hoelzro/bashrc/blob/master/colors.sh function __prompt { # List of color variables that bash can use local BLACK="\[\033[0;30m\]" # Black local DGREY="\[\033[1;30m\]" # Dark Gray local RED="\[\033[0;31m\]" # Red local LRED="\[\033[1;31m\]" # Light Red local GREEN="\[\033[0;32m\]" # Green local LGREEN="\[\033[1;32m\]" # Light Green local BROWN="\[\033[0;33m\]" # Brown local YELLOW="\[\033[1;33m\]" # Yellow local BLUE="\[\033[0;34m\]" # Blue local LBLUE="\[\033[1;34m\]" # Light Blue local PURPLE="\[\033[0;35m\]" # Purple local LPURPLE="\[\033[1;35m\]" # Light Purple local CYAN="\[\033[0;36m\]" # Cyan local LCYAN="\[\033[1;36m\]" # Light Cyan local LGREY="\[\033[0;37m\]" # Light Gray local WHITE="\[\033[1;37m\]" # White local RESET="\[\033[0m\]" # Color reset local BOLD="\[\033[;1m\]" # Bold # Base prompt PS1="$LCYAN\h:$YELLOW\w$LCYAN \\\$$RESET " local dirty local branch # Look for Git status if git status &>/dev/null; then if git status -uno -s | grep -q . ; then dirty=1 fi branch=$(git branch --color=never | sed -ne 's/* //p') # Look for Subversion status else svn_info=$( (svn info | grep ^URL) 2>/dev/null ) if [[ ! -z "$svn_info" ]] ; then branch_pattern="^URL: .*/(branch(es)?|tags)/([^/]+)" trunk_pattern="^URL: .*/trunk(/.*)?$" if [[ $svn_info =~ $branch_pattern ]]; then branch=${BASH_REMATCH[3]} elif [[ $svn_info =~ $trunk_pattern ]]; then branch='trunk' else branch='SVN' fi dirty=$(svn status -q) fi fi if [[ ! -z "$branch" ]]; then local status_color if [[ -z "$dirty" ]] ; then status_color=$LGREEN else status_color=$LRED fi PS1="$LCYAN($BOLD$status_color$branch$LCYAN)$RESET $PS1" fi } if [[ -z "$PROMPT_COMMAND" ]]; then PROMPT_COMMAND=__prompt else PROMPT_COMMAND="$PROMPT_COMMAND ; __prompt" fi __prompt
Just drop that into your ~/.bash directory as prompt.sh, and then add
source ~/.bash/prompt.sh
to your .bashrc. Now you have color-coded branch names: red for dirty, green for clean.
2 responses