Update 05.04.2026
This commit is contained in:
@@ -9,6 +9,10 @@ To use it, add `git-prompt` to the plugins array in your zshrc file:
|
||||
plugins=(... git-prompt)
|
||||
```
|
||||
|
||||
You may also need to [customize your theme](https://github.com/ohmyzsh/ohmyzsh/issues/9395#issuecomment-1027130429)
|
||||
to change the way the prompt is built. See the
|
||||
[OMZ wiki on customizing themes](https://github.com/ohmyzsh/ohmyzsh/wiki/Customization#overriding-and-adding-themes).
|
||||
|
||||
See the [original repository](https://github.com/olivierverdier/zsh-git-prompt).
|
||||
|
||||
## Requirements
|
||||
@@ -45,6 +49,7 @@ The symbols are as follows:
|
||||
| ●n | there are `n` staged files |
|
||||
| ✖n | there are `n` unmerged files |
|
||||
| ✚n | there are `n` unstaged files |
|
||||
| -n | there are `n` deleted files |
|
||||
| ⚑n | there are `n` stashed changes |
|
||||
| … | there are some untracked files |
|
||||
|
||||
@@ -59,6 +64,7 @@ The symbols are as follows:
|
||||
## Customisation
|
||||
|
||||
- Set the variable `ZSH_THEME_GIT_PROMPT_CACHE` to any value in order to enable caching.
|
||||
- Set the variable `ZSH_THEME_GIT_SHOW_UPSTREAM` to any value to display the upstream branch.
|
||||
- You may also change a number of variables (whose name start with `ZSH_THEME_GIT_PROMPT_`)
|
||||
to change the appearance of the prompt. Take a look at the bottom of the [plugin file](git-prompt.plugin.zsh)`
|
||||
to see what variables are available.
|
||||
|
||||
@@ -47,12 +47,19 @@ function update_current_git_vars() {
|
||||
GIT_UNTRACKED=$__CURRENT_GIT_STATUS[7]
|
||||
GIT_STASHED=$__CURRENT_GIT_STATUS[8]
|
||||
GIT_CLEAN=$__CURRENT_GIT_STATUS[9]
|
||||
GIT_DELETED=$__CURRENT_GIT_STATUS[10]
|
||||
|
||||
if [ -z ${ZSH_THEME_GIT_SHOW_UPSTREAM+x} ]; then
|
||||
GIT_UPSTREAM=
|
||||
else
|
||||
GIT_UPSTREAM=$(git rev-parse --abbrev-ref --symbolic-full-name "@{upstream}" 2>/dev/null) && GIT_UPSTREAM="${ZSH_THEME_GIT_PROMPT_UPSTREAM_SEPARATOR}${GIT_UPSTREAM}"
|
||||
fi
|
||||
}
|
||||
|
||||
git_super_status() {
|
||||
precmd_update_git_vars
|
||||
if [ -n "$__CURRENT_GIT_STATUS" ]; then
|
||||
STATUS="$ZSH_THEME_GIT_PROMPT_PREFIX$ZSH_THEME_GIT_PROMPT_BRANCH$GIT_BRANCH%{${reset_color}%}"
|
||||
STATUS="$ZSH_THEME_GIT_PROMPT_PREFIX$ZSH_THEME_GIT_PROMPT_BRANCH$GIT_BRANCH$GIT_UPSTREAM%{${reset_color}%}"
|
||||
if [ "$GIT_BEHIND" -ne "0" ]; then
|
||||
STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_BEHIND$GIT_BEHIND%{${reset_color}%}"
|
||||
fi
|
||||
@@ -69,6 +76,9 @@ git_super_status() {
|
||||
if [ "$GIT_CHANGED" -ne "0" ]; then
|
||||
STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_CHANGED$GIT_CHANGED%{${reset_color}%}"
|
||||
fi
|
||||
if [ "$GIT_DELETED" -ne "0" ]; then
|
||||
STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_DELETED$GIT_DELETED%{${reset_color}%}"
|
||||
fi
|
||||
if [ "$GIT_UNTRACKED" -ne "0" ]; then
|
||||
STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_UNTRACKED$GIT_UNTRACKED%{${reset_color}%}"
|
||||
fi
|
||||
@@ -91,11 +101,13 @@ ZSH_THEME_GIT_PROMPT_BRANCH="%{$fg_bold[magenta]%}"
|
||||
ZSH_THEME_GIT_PROMPT_STAGED="%{$fg[red]%}%{●%G%}"
|
||||
ZSH_THEME_GIT_PROMPT_CONFLICTS="%{$fg[red]%}%{✖%G%}"
|
||||
ZSH_THEME_GIT_PROMPT_CHANGED="%{$fg[blue]%}%{✚%G%}"
|
||||
ZSH_THEME_GIT_PROMPT_DELETED="%{$fg[blue]%}%{-%G%}"
|
||||
ZSH_THEME_GIT_PROMPT_BEHIND="%{↓%G%}"
|
||||
ZSH_THEME_GIT_PROMPT_AHEAD="%{↑%G%}"
|
||||
ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[cyan]%}%{…%G%}"
|
||||
ZSH_THEME_GIT_PROMPT_STASHED="%{$fg_bold[blue]%}%{⚑%G%}"
|
||||
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg_bold[green]%}%{✔%G%}"
|
||||
ZSH_THEME_GIT_PROMPT_UPSTREAM_SEPARATOR="->"
|
||||
|
||||
# Set the prompt.
|
||||
RPROMPT='$(git_super_status)'
|
||||
|
||||
@@ -23,9 +23,10 @@ def get_tagname_or_hash():
|
||||
return hash_
|
||||
return None
|
||||
|
||||
# Re-use method from https://github.com/magicmonty/bash-git-prompt to get stashs count
|
||||
# Re-use method from https://github.com/magicmonty/bash-git-prompt to get stash count
|
||||
# Use `--git-common-dir` to avoid problems with git worktrees, which don't have individual stashes
|
||||
def get_stash():
|
||||
cmd = Popen(['git', 'rev-parse', '--git-dir'], stdout=PIPE, stderr=PIPE)
|
||||
cmd = Popen(['git', 'rev-parse', '--git-common-dir'], stdout=PIPE, stderr=PIPE)
|
||||
so, se = cmd.communicate()
|
||||
stash_file = '%s%s' % (so.decode('utf-8').rstrip(), '/logs/refs/stash')
|
||||
|
||||
@@ -35,7 +36,6 @@ def get_stash():
|
||||
except IOError:
|
||||
return 0
|
||||
|
||||
|
||||
# `git status --porcelain --branch` can collect all information
|
||||
# branch, remote_branch, untracked, staged, changed, conflicts, ahead, behind
|
||||
po = Popen(['git', 'status', '--porcelain', '--branch'], env=dict(os.environ, LANG="C"), stdout=PIPE, stderr=PIPE)
|
||||
@@ -44,7 +44,7 @@ if po.returncode != 0:
|
||||
sys.exit(0) # Not a git repository
|
||||
|
||||
# collect git status information
|
||||
untracked, staged, changed, conflicts = [], [], [], []
|
||||
untracked, staged, changed, deleted, conflicts = [], [], [], [], []
|
||||
ahead, behind = 0, 0
|
||||
status = [(line[0], line[1], line[2:]) for line in stdout.decode('utf-8').splitlines()]
|
||||
for st in status:
|
||||
@@ -75,13 +75,15 @@ for st in status:
|
||||
else:
|
||||
if st[1] == 'M':
|
||||
changed.append(st)
|
||||
if st[1] == 'D':
|
||||
deleted.append(st)
|
||||
if st[0] == 'U':
|
||||
conflicts.append(st)
|
||||
elif st[0] != ' ':
|
||||
staged.append(st)
|
||||
|
||||
stashed = get_stash()
|
||||
if not changed and not staged and not conflicts and not untracked:
|
||||
if not changed and not deleted and not staged and not conflicts and not untracked:
|
||||
clean = 1
|
||||
else:
|
||||
clean = 0
|
||||
@@ -95,6 +97,7 @@ out = ' '.join([
|
||||
str(len(changed)),
|
||||
str(len(untracked)),
|
||||
str(stashed),
|
||||
str(clean)
|
||||
str(clean),
|
||||
str(len(deleted))
|
||||
])
|
||||
print(out, end='')
|
||||
|
||||
Reference in New Issue
Block a user