-
-
Save msabramo/2355834 to your computer and use it in GitHub Desktop.
function git_prompt_info() { | |
ref=$(git symbolic-ref HEAD 2> /dev/null) || return | |
echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$ZSH_THEME_GIT_PROMPT_SUFFIX" | |
} |
great stuff! thanks!
👍
Works great! Thanks!
Thanks, that looks great.
If anybody is still running into issues, you may trace all commands with set -o xtrace
, you will see full context and likely which command may be taking long time. It helped me trace my problem.
@kwketh How to undo set -o xtrace
?
After applying this fix I am missing the *
(when I have midified working tree).
HAPPY TO MEET YOU!
Thank you for this gist, it made working with zsh possible again for me as it was just unusably slow and i had to disable it again.
That's great ,thanks a lot.
Still relevant and wonderful. Thanks!
That worked, thanks a lot!
Awesome!
nice!
Works like a charm! Thank you so much.
👍
Great!
@pmalek to undo set -o xtrace
, run set +o xtrace
- plus instead of minus
In my case, this didn't noticeably improve the delay. It has all the same symptoms (no delay outside of Git repo; delay for anything that causes a new prompt to draw, like hitting enter on an empty line, <ctrl+l>
, etc.; no delay pressing other keys or while a command is still running.) This does not appear to be related to my network speed. I could post my versions, config files, etc. but I'd like to look find more general alternative approaches first.
For what it's worth, I'm using bhilburn/powerlevel9k with submodule checking disabled, effectively --ignore-submodules=dirty
(not that the project I'm testing on has submodules anyway - more complicated projects I've cloned take much longer.)
Would it be possible to set a flag or add a sentinel file somewhere to indicate if/when the local status has actually changed? Maybe caching the command's output and using the cached version if the (parent) directory's modified date is within some threshold of the cache, or if the cache is similarly recent compared to the current time? The worst effects if it malfunctions should be saving the output every time (negligible contribution to original delay) or showing an outdated status, and both should be fixed by re-tuning the threshold, and of course excluding the cache file via .gitignore.
A few benchmarks for reference...
I can't seem to use the time
command on git_prompt_info
, but 500 iterations of the command (piped to /dev/null
; book-ended by date
) averaged to 26ms each.
Timing git add -An
and git status
with the same method each average to 12ms.
Pinging github.com (as a lower bound) shows an average delay of 20-30ms with a few minutes between each run.
where should I insert your code to make it works? thanks!
where should I insert your code to make it works? thanks!
In your ~/.zshrc
file.
Everyone seems pretty stoked to be rid of git status from their prompt because the git_current_branch function can be slow for large repos, but if anyone would still like to see info on their current branch you can replace with the following which is still fairly fast:
export PROMPT='${ret_status} %{$fg[cyan]%}%~%{$reset_color%} %{$fg[blue]%}$(git_current_branch)%{$reset_color%} $ '
Could someone clarify: Should one paste the above function git_prompt...
into ~/.zshrc
? I don't seem to notice a difference, but then I am testing on a small repo.
Git config modification to "hide dirty" check
git config --add oh-my-zsh.hide-dirty 1
https://github.com/robbyrussell/oh-my-zsh/blob/master/lib/git.zsh#L16
if [[ "$(command git config --get oh-my-zsh.hide-dirty)" != "1" ]]; then
thank you!
thanks!
Git config modification to "hide dirty" check
git config --add oh-my-zsh.hide-dirty 1
https://github.com/robbyrussell/oh-my-zsh/blob/master/lib/git.zsh#L16
if [[ "$(command git config --get oh-my-zsh.hide-dirty)" != "1" ]]; then
Thanks!
If someone uses gruvbox theme on ZSH, you may have to comment out prompt_bzr
from build_prompt
function in ~/.oh-my-zsh/custom/themes/gruvbox.zsh-theme
file.
Or you may check why ZSH lags by executing this
zsh -vx
this saved my day!
Thanks ; would it be enough if I just paste it into .zshrc
file?
Awesome and thanks @liladas!
@avatar-lavventura, add this snippet just above the source $ZSH/oh-my-zsh.sh
line in your ~/.zshrc
function git_prompt_info() {
local ref
if [[ "$(command git config --get oh-my-zsh.hide-dirty)" != "1" ]]; then
if [[ "$(__git_prompt_git config --get oh-my-zsh.hide-status 2>/dev/null)" != "1" ]]; then
ref=$(__git_prompt_git symbolic-ref HEAD 2> /dev/null) || \
ref=$(__git_prompt_git rev-parse --short HEAD 2> /dev/null) || return 0
echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX"
fi
fi
}
And inside your desired (probably very large) git repo, run this command git config --add oh-my-zsh.hide-dirty 1
Thanks! That was driving me insane.