

Display your current git branch as part of your bash prompt - kd5bjo
http://gist.github.com/168835

======
zain
Cool! I've practically created my own framework in Bash to hack my prompt but
I never thought about sharing it.

My prompt shows the git branch, svn revision, and active virtualenv ("workon"
and "deactivate" are virtualenv commands in the screenshot below). Also, mine
has COLORS! (Colors within the dynamic function are much harder than they
sound)

Here's a quick screenshot:
[http://img.skitch.com/20090817-gtp7bgkmdn14j84ryhepa2edke.pn...](http://img.skitch.com/20090817-gtp7bgkmdn14j84ryhepa2edke.png)

You can extend it pretty easily to show whatever you want by doing little more
than adding another function. Throw this into ~/.profile if you want to try
it: <http://pastebin.com/f79a9af51>

------
kd5bjo
Emmett and I figured this out the other day at the request of one of our other
engineers; I thought that some of you might be interested in it.

~~~
decklin
It's better to use a plumbing command for this sort of thing; git-
completion.bash
([http://git.kernel.org/?p=git/git.git;a=blob;f=contrib/comple...](http://git.kernel.org/?p=git/git.git;a=blob;f=contrib/completion/git-
completion.bash;h=5543dc4d14e22b065cbc41ed8af0f695c0464152;hb=HEAD)) has a
thorough example. (The actual command called is 'git symbolic-ref HEAD'.)

~~~
kd5bjo
That's definitely a lot more full-featured, but seems like overkill for what I
was trying to do.

Had I known about `git symbolic-ref`, I might have used that instead of `git
branch`. On the other hand, I would have needed to re-implement lots of what
`git branch` does, such as detecting the difference between not being in a git
repository and simply not being on a branch.

The interface of `git branch` seems stable enough that I doubt it will break
this. If it does, it should take me no longer than 5 minutes to fix, since
that's about how long it would take me to re-write the whole thing from
scratch.

Is there any particular reason that using `git symbolic-ref` is better than
`git branch` in this case, given that I want human-readable output, instead an
unambiguous filesystem location?

~~~
decklin
Personally, I'd argue you _do_ want to keep track of whether you are in a repo
or not, since including that pipeline in your PS1 always forks three processes
on every prompt. And if you're going to do that in your shell, it's good to
have separate commands for each task.

For the case of not being on a branch, the output of 'git branch' is not very
useful. I am currently using 'git name-rev --name-only HEAD', but the contrib
script has an even fancier mechanism (via 'git describe') for coming up with
something to display when HEAD isn't a symbolic ref.

------
sandGorgon
zsh does a much better job (with its right prompts and formatting)
<http://img194.imageshack.us/img194/2101/zsh1.png> \- this actually shows a
git repository imported from svn

<http://img40.imageshack.us/img40/3738/zsh2.png> \- this shows a regular svn
repo

This is what you need in your zshrc

# precmd is called just before the prompt is printed function precmd() { title
“zsh” “$USER@%m” “%55<…<%~” psvar=() vcs_info [[ -n $vcs_info_msg_0_ ]] &&
psvar[1]=”$vcs_info_msg_0_” }

vcs_info export RPS1=”${YELLOW}%1v${NORM}”

------
PStamatiou
Isn't this also in a public github guide? [http://github.com/guides/put-your-
git-branch-name-in-your-sh...](http://github.com/guides/put-your-git-branch-
name-in-your-shell-prompt)

Been using it for a while now. ;-)

------
oldgregg
Funny, I wrote this .bash_profile script (<http://gist.github.com/168286>)
just the other day because I wanted... 1) Minimalist colors 2) Stripped down
CLEAN prompt 3) For GIT folders it will display the current branch.

It was based on this which I thought was too ugly:
[http://www.simplisticcomplexity.com/2008/03/13/show-your-
git...](http://www.simplisticcomplexity.com/2008/03/13/show-your-git-branch-
name-in-your-prompt/)

Also, if you use git+github+capistrano, I wrote a bash script where you type
"tap" and it will add all new files, commit, push to github. If you type "tap
/d" it will also cap deploy it to the server and reload in nginx passenger.
For small projects I'll push something and then have to make a small change.
Now I can just edit the file in textmate and can add-commit-push-deploy with
one command.

<http://gist.github.com/168589>

------
mbrubeck
I use Ryan Tomayko's git-sh, a "git mode" for Bash that includes the branch in
the prompt, and also adds the most common git commands as top-level commands
(so you can type "checkout master" instead of "git checkout master"):

<http://github.com/rtomayko/git-sh/tree/master>

------
xgamerx
I reworked this script to show your branch name in green if the branch is
clean and red if the branch is dirty. Personal preference but I prefer the
visual color distinction denoting branch state.

<http://gist.github.com/120804>

------
jackdawjack
I liked this but it really slowed things down. Perhaps because my home folder
etc are all on nfs shares?

------
llimllib
Totally do this; I can't live without it.

Also, display your current branch in mercurial repos:
[http://stevelosh.com/blog/entry/2009/3/17/mercurial-bash-
pro...](http://stevelosh.com/blog/entry/2009/3/17/mercurial-bash-prompts/)

------
lvv
You have not seen git-prompt yet. How about forgetting that there is git-
status? See <http://volnitsky.com/project/git-prompt> And it will do svn, hg
and a lot of other stuff.

------
codahale
Leonid Volnitsky's git-prompt is _the_ best git-enabled Bash script I've
found.

<http://github.com/lvv/git-prompt/tree/master>

------
myth_drannon
It's by default in msysgit bash.

