Oh-my-zsh lent, mais seulement pour certains git repo

j'ai récemment commencé à utiliser Zsh et c'est génial. Malheureusement, pour le projet que je considère comme mon" principal " projet, tout est lent. Ce que je veux dire , c'est que chaque fois que j'exécute une commande - ls , par exemple - il y a environ cinq secondes de retard entre le moment où la commande est exécutée et le moment où je peux utiliser le terminal à nouveau.

Qu'y a-t-il de différent dans ce rapport qui rend Zsh si lent? Je suppose que C'est un truc spécifique à Zsh parce qu'il n'y avait pas de problème. avant de commencer à utiliser Zsh. J'ai essayé de faire un git clean mais ça n'a pas fait de différence notable.

Je suis sur Mac OS X, si ça compte.

mise à jour: il S'avère que cette ligne de mon .zshenv est ce qui le rendait lent:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function

si je commente cette ligne, il va de prendre environ 3 secondes à prendre environ 1 seconde. Malheureusement, j'ai besoin de cette ligne, puisque beaucoup de mes projets utilisent RVM. Je ne sais pas quoi faire maintenant.

Update 2 : cela semble être spécifiquement une chose oh-my-zsh. Si Je ne charge pas ~/.oh-my-zsh/oh-my-zsh.sh , je n'ai pas de problème.

49
demandé sur Jason Swett 2012-10-07 05:21:57

8 réponses

vous pouvez ajouter ceci à votre configuration git et zsh ne vérifiera plus le statut

git config --add oh-my-zsh.hide-status 1
git config --add oh-my-zsh.hide-dirty 1

explication

il y a deux fonctions git centrales dans lib/git.zsh :

  • git_prompt_info()
  • parse_git_dirty()

chaque méthode a un commutateur de configuration git pour la désactiver:

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

certains thèmes créent leurs propres requêtes git et parfois ignorent ces drapeaux .

82
répondu Pascalius 2018-05-02 20:03:35

il y a plusieurs façons d'accélérer un oh-my-zsh , comme détaillé dans " zsh commence incroyablement lentement ", nettoyage de la section plugin.

Par exemple, le billet de blog " Fix pour oh-my-zsh git-svn invite lenteur ", mentionne le parse_git_dirty fonction comme un problème potentiel.

10
répondu VonC 2017-03-20 10:18:17

ça pourrait être le thème appelant des trucs git et rvm après chaque commande.

pour moi, changer ZSH_THEME="juanghurtadoto" en ZSH_THEME="miloshadzic" enlève complètement le délai de 2 secondes après chaque commande.

les thèmes se trouvent à https://github.com/robbyrussell/oh-my-zsh/wiki/themes

8
répondu James EJ 2013-01-20 19:10:10

Oh_my_zsh semble être lent pour certaines repos, car il vérifie l'état de l'opération après chaque commande. Ce comportement peut être remplacé dans la nouvelle version de .oh_my_zsh . Juste Décommentez la ligne suivante .zshrc:

DISABLE_UNTRACKED_FILES_DIRTY= "true"

après cela, redémarrez votre terminal ou lancez ce qui suit:

source ~/.zshrc

8
répondu Peeyush Goela 2018-06-12 05:53:08

j'ai enfin compris. Mon projet avait un dossier rake avec une tonne de fichiers (comme 20 000). Je n'ai aucune idée de ce que le dossier était là, mais je l'ai supprimé, Zsh est plus lent, et mon application semble fonctionner.

5
répondu Jason Swett 2013-02-16 18:54:34

pour moi C'est lent sur VirtualBox (l'invité) parce que j'utilise un dossier synchronisé. Je veux toujours qu'il soit activé sur OS X (l'hôte) où il est assez rapide. Au lieu d'utiliser un paramètre de configuration local qui est stocké avec le repo et qui le changerait à la fois sur le client et sur l'hôte, j'utilise un paramètre de configuration global config setting uniquement sur le client :

git config --global --add oh-my-zsh.hide-dirty 1

Si je le veux juste pour un seul repo:

git config --add oh-my-zsh.hide-dirty 1
5
répondu Ben Atkin 2018-05-02 20:09:50

si vous ne vous souciez pas d'autres programmes de contrôle de version mais git , vous pouvez juste désactiver tous les vcs_info dans votre *.zsh-theme et les remplacer par des commandes natives git .

par exemple je tweak mon agnoster.zsh-theme par:

  1. commentaire/supprimer toutes les lignes qui contiennent vcs_info ,
  2. modifier le code prompt_git() fonction de:

    ref="$vcs_info_msg_0_" à

    ref="$(git branch 2>/dev/null | grep -Po '(?<=\* ).*$')"

donc, fondamentalement, j'ai juste désactivé toutes les actions vcs_info , et à la place utiliser une commande git native pour vérifier les Statuts de la pension. En conséquence, je peux encore voir mon invite git utile avec une vitesse aussi rapide que travailler dans un répertoire non-git. Avec cette petite modification, mon zsh peut travailler 4-5x plus vite dans les git repos.

Note: utiliser GNU grep pas BSD grep.

1
répondu fronthem 2017-12-03 06:08:25

probablement la solution la plus simple et la plus fiable que j'ai pu trouver était de taper

bash

j'ai fait cela dans le répertoire avec mon énorme dépôt git et tout fonctionne très bien.

-4
répondu Abhi Tk 2017-06-16 18:20:34