Oh-my-zsh slow, ale tylko dla pewnosci Git repo
[5]}ostatnio zacząłem używać Zsh i jest super. Niestety, dla projektu uważam mój" główny " projekt, wszystko jest powolne. Chodzi mi o to, że za każdym razem, gdy uruchamiam polecenie - ls
, na przykład-jest jakieś pięć sekund opóźnienia między czasem wykonania polecenia a czasem ponownego użycia terminala.
Co może być innego w tym jednym repo, który sprawia, że Zsh jest tak powolny? Zakładam, że jest to rzecz specyficzna dla Zsh, ponieważ nie było problemu, zanim zacząłem używać Zsh. I próbowałem zrobić git clean
, ale to nie zrobiło żadnej zauważalnej różnicy.
Update: okazuje się, że ta linia mojego .zshenv
jest tym, co zwalnia:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function
Jeśli skomentuję tę linię, to trwa ona od około 3 sekund do około 1 sekundy. Niestety, potrzebuję tej linii, ponieważ wiele moich projektów wykorzystuje RVM. Nie wiem, co teraz robić.
Update 2: wydaje się, że jest to szczególnie oh-my-zsh. Jeśli nie load ~/.oh-my-zsh/oh-my-zsh.sh
, nie mam problemu.
8 answers
Możesz dodać to do swojego Git config i zsh nie będzie już sprawdzać statusu
git config --add oh-my-zsh.hide-status 1
git config --add oh-my-zsh.hide-dirty 1
Wyjaśnienie
Istnieją dwie Centralne funkcje git w in lib / git.zsh:
git_prompt_info()
parse_git_dirty()
Każda metoda ma przełącznik git config, aby ją wyłączyć:
oh-my-zsh.hide-status
oh-my-zsh.hide-dirty
Niektóre motywy tworzą własne zapytania git i czasami ignorują te flagi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-02 20:03:35
Istnieją różne sposoby na przyspieszenie oh-my-zsh
, jak opisano w "zsh zaczyna się niesamowicie powoli ", czyszcząc sekcję wtyczek.
Na przykład post na blogu "Fix for oh-my-zsh Git-svn prompt slowness " wspomina o funkcji parse_git_dirty
jako potencjalnym problemie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-20 10:18:17
Może to być motyw wywołujący GIT i RVM po każdym poleceniu.
Dla mnie zmiana ZSH_THEME="juanghurtadoto"
na ZSH_THEME="miloshadzic"
całkowicie usunęła 2-sekundowe opóźnienie po każdym poleceniu.
Tematy można znaleźć na https://github.com/robbyrussell/oh-my-zsh/wiki/themes
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-20 19:10:10
Oh_my_zsh wydaje się być powolny dla niektórych repo, ponieważ sprawdza status repo po każdym poleceniu. To zachowanie może zostać nadpisane w nowej wersji .oh_my_zsh . Po prostu odkomentuj następującą linię .zshrc:
DISABLE_UNTRACKED_FILES_DIRTY="true"
Następnie uruchom ponownie terminal lub uruchom następujące polecenie:
Źródło~/.zshrc
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-12 05:53:08
W końcu to rozgryzłem. Mój projekt miał folder rake
z mnóstwem plików (jak 20,000). Nie mam pojęcia, po co był ten folder, ale usunąłem go, Zsh nie jest już powolny, a moja aplikacja nadal wydaje się działać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-16 18:54:34
Dla mnie jest wolny na VirtualBox (gość), ponieważ używam zsynchronizowanego folderu. Nadal chcę go włączyć na OS X (host), gdzie jest wystarczająco szybki. Zamiast używać Lokalnego ustawienia konfiguracyjnego, które jest przechowywane w repo i zmieniałoby je zarówno na gościu, jak i na gospodarzu, używam globalnego ustawienia konfiguracyjnego tylko na gościu :
git config --global --add oh-my-zsh.hide-dirty 1
Jeśli chcę to tylko dla jednego repo:
git config --add oh-my-zsh.hide-dirty 1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-02 20:09:50
Jeśli nie dbasz o inne programy kontroli wersji, ale git
, możesz po prostu wyłączyć wszystkie vcs_info
w swoim *.zsh-theme
i zastąpić je natywnymi poleceniami git
.
Na przykład poprawiam moje agnoster.zsh-theme
przez:
- skomentuj / usuń wszystkie linie, które mają
vcs_info
, -
Edit code in
prompt_git()
function from:ref="$vcs_info_msg_0_"
doref="$(git branch 2>/dev/null | grep -Po '(?<=\* ).*$')"
W zasadzie wyłączyłem wszystkie działania vcs_info
i zamiast tego użyłem natywnej komendy git
do sprawdzania statusy repo. W rezultacie nadal mogę zobaczyć mój przydatny monit git z prędkością tak szybką jak Praca w katalogu innym niż git. Z tą małą modyfikacją, mój zsh może pracować 4-5x szybciej w GIT repos.
Uwaga: używaj GNU grep nie BSD grep.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-03 06:08:25
Prawdopodobnie najbardziej proste i niezawodne obejście, które mogłem wymyślić, to po prostu wpisać
bash
Zrobiłem to w katalogu z moim ogromnym repozytorium git i wszystko działa świetnie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-16 18:20:34