A zsh
prompt that displays information about the current git repository.
In particular the branch name, difference with remote branch, number of files staged, changed, etc.
(an original idea from this blog entry).
The prompt may look like the following:
(master↑3‣1)
: on branchmaster
, ahead of remote by 3 commits, 1 file changed but not staged(status♦2)
: on branchstatus
, 2 files staged(master‣7…)
: on branchmaster
, 7 files changed, some files untracked(experimental↓2↑3)
: on branchexperimental
; your branch has diverged by 3 commits, remote by 2 commits(:70c2952)
: not on any branch; parent commit has sha170c2952
Here is how it could look like when you are ahead by 2 commits, and have 3 staged files, 1 changed but unstaged file, and some untracked files, on branch dev
:
The symbols are as follows:
- Status Symbols
⚡: repository clean ♦n: there are n
staged files♠n: there are n
unmerged files‣n: there are n
changed but unstaged files…: there are some untracked files
- Branch Symbols
↑n: ahead of remote by n
commits↓n: behind remote by n
commits↓m↑n: branches diverged, other by m
commits, yours byn
commits:: when the branch name starts with a colon :
, it means it's actually a sha1, not a branch (although it should be pretty clear, unless you name your branches like sha1 :-)
Copy the contents of
zshrc.sh
into your~/.zshrc
config file (and adapt thePROMPT
variable to your needs)Create the directories
~/.zsh
and~/.zsh/functions
if they do not existMove the files so as to get the following structure:
.zsh/ gitstatus.py functions/ chpwd_update_git_vars.sh precmd_update_git_vars.sh preexec_update_git_vars.sh prompt_git_info update_current_git_vars.sh
Adapt the format of the git information inside the
prompt_git_info
file to your needs.Go in a git repository and test it!
Enjoy!