Saturday, April 21, 2012

bash git prompts or I forgot again my git branch

To have your command prompt indicates in which branch you are :
(mybranch) root:~$

source : http://blog.piwai.info/2011/10/09/roooh-jai-encore-oublie-ma-branche-git/
source : http://www.git-attitude.fr/2010/07/14/le-prompt-bash-qui-change-la-vie-avec-git/

If you want to view how many commit you are ahead or behind from origin/master add this bash script to your .bashrc file

If you are ahead of 2 commit and behind of one commit from origin/master, you will have something like : (mybranch+2-1) root:~$
# git branch name in prompt
c_red
=`tput setaf 1`
c_green
=`tput setaf 2`
c_sgr0
=`tput sgr0`

# http://stackoverflow.com/questions/1593051/how-to-programmatically-determine-the-current-checked-out-git-branch

parse_git_branch
() {
 
if git rev-parse --git-dir >/dev/null 2>&1
 
then
# TODO ?          gitver=$(git rev-parse --symbolic-full-name --abbrev-ref HEAD)
          gitver
=$(git branch 2>/dev/null| sed -n '/^\*/s/^\* //p')
 
else
         
return 0
 
fi
 
  git_has_current_branch_remotes_origin
=$( git branch -a | grep "remotes/origin/$gitver" | wc -l )
  git_has_remotes_origin
=$( git branch -a | grep "remotes/origin" | wc -l )

 
if test $git_has_current_branch_remotes_origin = 0
 
then
          git_head_to_origin
=""
 
else
          git_ahead
=$(git log origin/$gitver..HEAD --oneline | wc -l)
          git_behind
=$(git log HEAD..origin/$gitver --oneline | wc -l)
         
         
if [ $git_ahead != 0 ]
         
then
                git_ahead_msg
="+"$git_ahead
         
fi

         
if [ $git_behind != 0 ]
         
then
                git_behind_msg
="-"$git_behind
         
fi
 
fi
   
  echo
-e "($gitver$git_ahead_msg$git_behind_msg) "
}

branch_color
() {
       
if git rev-parse --git-dir >/dev/null 2>&1
       
then
                color
=""
               
if git diff --quiet 2>/dev/null >&2
               
then
                        color
="${c_green}"
               
else
                        color
=${c_red}
               
fi
       
else
               
return 0
       
fi
        echo
-ne $color
}

PS1
="\[\$(branch_color)\]\$(parse_git_branch)\[$(tput sgr0)\]$PS1"