哦-my-zsh很慢,但只适用于某些Git回购

Jas*_*ett 74 git zsh

我最近开始使用Zsh,它很棒.不幸的是,对于这个项目,我认为我的"主要"项目,一切都很慢.我的意思是每次我运行一个命令 - ls例如 - 在执行命令的时间与我再次使用终端之间的时间差不多是五秒钟.

这个回购让Zsh如此缓慢有什么不同?我认为这是Zsh特有的,因为在我开始使用Zsh之前没有问题.我尝试过做git clean但没有任何明显的区别.

如果重要的话,我在Mac OS X上.

更新:原来我的这一行.zshenv是什么让它变慢:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function
Run Code Online (Sandbox Code Playgroud)

如果我对该行进行评论,则需要大约3秒钟,大约需要1秒钟.不幸的是,我需要那条线,因为我的很多项目都使用RVM.我现在不知道该怎么办.

更新2:这似乎是一个特别的哦哦我的zsh的事情.如果我没有加载~/.oh-my-zsh/oh-my-zsh.sh,我没有问题.

Pas*_*ius 119

您可以将其添加到您的git配置中,zsh将不再检查状态

git config --add oh-my-zsh.hide-status 1
git config --add oh-my-zsh.hide-dirty 1
Run Code Online (Sandbox Code Playgroud)

说明

lib/git.zsh中有两个中央git函数:

  • git_prompt_info()
  • parse_git_dirty()

每个方法都有一个git config开关来禁用它:

  • oh-my-zsh.hide-status
  • oh-my-zsh.hide-dirty

有些主题会创建自己的git查询,有时会忽略这些标记.

  • `git config --add oh-my-zsh.hide-dirty 1` 就是我缓慢的仓库所需要的。 (15认同)
  • 这个解决方案仍然有效,只是在我的Symfony2项目文件夹中尝试了这个.也许供应商文件夹让事情变得缓慢,就像rake文件夹对rails应用程序一样?zsh现在很快,我也不需要GIT zsh插件.谢谢! (4认同)
  • 使用“--global”在 vagrant virtualbox 虚拟机的全局设置中执行此操作非常方便(在来宾中缓慢,在主机上快速),如下所述:http://stackoverflow.com/a/40943155/1092815 <3 (2认同)
  • 这个命令让我瞬间松了口气! (2认同)

Pee*_*ela 17

哦_my_zsh对于某些回购似乎很慢,因为它会在每个命令后检查回购的状态.可以在新版本的.oh_my_zsh中覆盖此行为.只需取消注释.zshrc中的以下行:

DISABLE_UNTRACKED_FILES_DIRTY = "真"

在此之后,重新启动终端或运行以下命令:

源〜/ .zshrc

  • 在大文件存储库上不适用于我的 mac m1。 (3认同)
  • git config --add oh-my-zsh.hide-status 1加快了工作速度,但它完全删除了VCS的zsh状态。这个保持它并仍在加快速度。 (2认同)
  • 我希望这能解决问题,但即使在 source ~/.zshrc 之后也没有效果。不过,`git config --add oh-my-zsh.hide-dirty 1`对我有用。`git config --global --add oh-my-zsh.hide-dirty 1` 为所有存储库禁用此功能。 (2认同)

Von*_*onC 11

有很多方法可以加快速度oh-my-zsh,正如" zsh开始速度非常慢 " 所详述的那样,清理插件部分.

例如,博客文章" Fix for oh-my-zsh git-svn prompt slowness "提到该parse_git_dirty功能是一个潜在的问题.


Jam*_* EJ 11

它可能是在每个命令之后调用git和rvm的主题.

对我来说,改变ZSH_THEME="juanghurtadoto"以完全ZSH_THEME="miloshadzic"删除每个命令后的2秒延迟.

主题可以在https://github.com/robbyrussell/oh-my-zsh/wiki/themes找到


Ben*_*kin 10

对我来说,VirtualBox(来宾)的速度很慢,因为我使用的是同步文件夹.我仍然想在OS X(主机)上启用它,它足够快.而不是使用与repo一起存储的本地配置设置,并且会在guest虚拟机和主机上更改它,我只在guest虚拟机上使用全局配置设置:

git config --global --add oh-my-zsh.hide-dirty 1
Run Code Online (Sandbox Code Playgroud)

如果我只想要一个回购:

git config --add oh-my-zsh.hide-dirty 1
Run Code Online (Sandbox Code Playgroud)


Jay*_*van 10

对于其他提出这个问题并希望改善 zsh git 延迟的人,以下方法将我的延迟从 减少40ms4ms

  1. 编译并安装优化git-branch-name命令:

    git clone https://github.com/notfed/git-branch-name
    cd git-branch-name
    make
    sudo install git-branch-name /usr/local/bin/
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将其添加到您的~/.zshrc

    function git_prompt_info() {
        ref=$(git-branch-name -q -h 12 -b 64) || return
        echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${ref}${ZSH_THEME_GIT_PROMPT_CLEAN}${ZSH_THEME_GIT_PROMPT_SUFFIX}"
    }
    
    Run Code Online (Sandbox Code Playgroud)

-h-b标志分别控制分支名称和哈希的截断长度。)

有了这个,我可以按住 Enter 并且不会遇到任何延迟。


Jas*_*ett 6

我终于弄明白了.我的项目有一个rake包含大量文件的文件夹(如20,000).我不知道该文件夹是什么,但我删除它,Zsh不再慢,我的应用程序似乎仍然有效.

  • 我花了4个月的时间才搞清楚! (5认同)

小智 5

顶级解决方案建议

git config --add oh-my-zsh.hide-status 1
git config --add oh-my-zsh.hide-dirty 1
Run Code Online (Sandbox Code Playgroud)

它可以工作,但会禁用一些很酷的功能,例如分支名称和脏度。对我来说,有效的是压缩 git 的数据库,但使用aggressive标志:

git gc --aggressive
Run Code Online (Sandbox Code Playgroud)