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.

Jestem na Mac OS X, jeśli to ma znaczenie.

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.

 49
Author: Jason Swett, 2012-10-07

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.

 82
Author: Pascalius,
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.

 10
Author: VonC,
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

 8
Author: James EJ,
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

 8
Author: Peeyush Goela,
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ć.

 5
Author: Jason Swett,
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
 5
Author: Ben Atkin,
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:

  1. skomentuj / usuń wszystkie linie, które mają vcs_info,
  2. Edit code in prompt_git() function from:

    ref="$vcs_info_msg_0_" do

    ref="$(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.

 1
Author: fronthem,
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.

 -4
Author: Abhi Tk,
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