-
-
Save henrik/31631 to your computer and use it in GitHub Desktop.
# http://henrik.nyh.se/2008/12/git-dirty-prompt | |
# http://www.simplisticcomplexity.com/2008/03/13/show-your-git-branch-name-in-your-prompt/ | |
# username@Machine ~/dev/dir[master]$ # clean working directory | |
# username@Machine ~/dev/dir[master*]$ # dirty working directory | |
function parse_git_dirty { | |
[[ $(git status 2> /dev/null | tail -n1) != "nothing to commit (working directory clean)" ]] && echo "*" | |
} | |
function parse_git_branch { | |
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[\1$(parse_git_dirty)]/" | |
} | |
export PS1='\u@\h \[\033[1;33m\]\w\[\033[0m\]$(parse_git_branch)$ ' |
Change nothing to commit (working directory clean)
to nothing to commit, working directory clean
if you're getting a persistent *
even if your working directory is clean.
Thank you. Color coded branch name depending on state at https://gist.github.com/srguiwiz/de87bf6355717f0eede5 , green or red.
So I took this and improved on it a bit. Check it out here: https://github.com/jcgoble3/gitstuff/blob/master/gitprompt.sh This uses more reliable code that doesn't rely on a specific output that could change in a new version of Git, and is a bit cleaner and easier to read. Feel free to use it or improve on it more.
Works fine, edited slightly. git status --porcelain
like @xbx suggested then changed the "nothing to commit (working directory clean) to nothing to commit, working directory clean"
string to ""
. This makes it stable across Git versions and regardless of user configuration
Thanks for this! I added git status --porcelain
to make things more robust, added in color per @srguiwiz's fork, and fixed an issue where colors weren't escaped (causing line-wrapping issues).
Updated color-coded branch here: https://gist.github.com/chrisnolet/46206e21d59f8250bb979a8516a9a034
This doesn't work anymore because git status
ends with "nothing to commit, working tree clean" now (at least with my version).
You can replace the contents of parse_git_dirty
with [[ -z $(git status --porcelain) ]] || echo "*"
git status --porcelain
function dirty(){
if [[ $(git status --porcelain) ]];
then
echo "dirty";
else
echo "clean"
fi
}
Another version for zsh
(now the default shell on macOS) with color-coding: https://gist.github.com/chrisnolet/d3582cd63eb3d7b4fcb4d5975fd91d04
function parse_git_dirty {
if [[ $(git status --porcelain 2> /dev/null) ]];
then
echo "*";
else
echo ""
fi
}
I appreciate that this old Gist still lures people in :)
These days I use Git's supplied prompt script with the GIT_PS1_SHOWDIRTYSTATE=1
setting: https://github.com/henrik/dotfiles/blob/602afb2644b61d0b1b82c09fabe94c60b9c29c74/bash/prompt.sh
thanks for this! my version of git prints out "nothing to commit, working directory clean", so change that string if your dirty checking isn't working.