git - mac - zsh god
oh-my-zsh lento, pero solo para cierto repositorio de Git (8)
Finalmente lo resolví. Mi proyecto tenía una carpeta de rake
con una tonelada de archivos (como 20,000). No tengo idea de para qué estaba allí esa carpeta, pero la eliminé, Zsh ya no es lenta y mi aplicación todavía parece funcionar.
Recientemente comencé a usar Zsh y es increíble. Desafortunadamente, para el proyecto considero que mi proyecto "principal", todo es lento. Lo que quiero decir es que cada vez que ejecuto un comando ( ls
, por ejemplo), hay un retraso de aproximadamente cinco segundos entre el momento en que se ejecuta el comando y el tiempo en que puedo usar el terminal nuevamente.
¿Qué podría ser diferente en este repo que hace que Zsh sea tan lento? Supongo que es algo específico de Zsh porque no hubo ningún problema antes de comenzar a usar Zsh. Intenté hacer un git clean
pero no hizo ninguna diferencia notable.
Estoy en Mac OS X, si eso importa.
Actualización: Resulta que esta línea de mi .zshenv
es lo que lo hacía lento:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function
Si comento esa línea, pasa de tomar aproximadamente 3 segundos a tomar aproximadamente 1 segundo. Desafortunadamente, necesito esa línea, ya que muchos de mis proyectos usan RVM. No sé qué hacer ahora.
Actualización 2 : esto parece ser específicamente una cosa oh-my-zsh. Si no carga ~/.oh-my-zsh/oh-my-zsh.sh
, no tengo el problema.
Hay varias formas de acelerar un oh-my-zsh
, como se detalla en " zsh arranca increíblemente lento ", limpiando la sección del complemento.
Por ejemplo, la publicación del blog " Arreglar la lentitud del mensaje de git-svn de oh-my-zsh " menciona la función parse_git_dirty
como un problema potencial.
Oh_my_zsh parece ser lento para algunos repos porque comprueba el estado del repositorio después de cada comando. Este comportamiento se puede anular en la nueva versión de .oh_my_zsh. Descomente la siguiente línea en .zshrc:
DISABLE_UNTRACKED_FILES_DIRTY = "true"
Después de esto, reinicie su terminal o ejecute lo siguiente:
fuente ~ / .zshrc
Para mí es lento en VirtualBox (el invitado) porque estoy usando una carpeta sincronizada. Todavía quiero que esté habilitado en OS X (el host) donde es lo suficientemente rápido. En lugar de usar una configuración de configuración local que se almacena con el repositorio y la cambiaría tanto en el invitado como en el host, utilizo una configuración de configuración global solo en el invitado :
git config --global --add oh-my-zsh.hide-dirty 1
Si lo quiero solo para un solo repo:
git config --add oh-my-zsh.hide-dirty 1
Podría ser el tema que llama a git y rvm stuff después de cada comando.
Para mí, cambiando ZSH_THEME="juanghurtadoto"
a ZSH_THEME="miloshadzic"
el retraso de 2 segundos después de cada comando por completo.
Los temas se pueden encontrar en https://github.com/robbyrussell/oh-my-zsh/wiki/themes
Probablemente la solución más sencilla y confiable que se me ocurrió fue simplemente escribir
bash
Hice esto en el directorio con mi enorme repositorio de git y todo funciona muy bien.
Puedes agregar esto a tu git config y zsh ya no verificará el estado
git config --add oh-my-zsh.hide-status 1
git config --add oh-my-zsh.hide-dirty 1
Explicación
Hay dos funciones centrales de git en lib/git.zsh :
-
git_prompt_info()
-
parse_git_dirty()
Cada método tiene un interruptor de configuración git para desactivarlo:
-
oh-my-zsh.hide-status
-
oh-my-zsh.hide-dirty
Algunos temas crean sus propias consultas de git y, a veces, ignoran estas banderas .
Si no le importan otros programas de control de versión pero git
, puede deshabilitar todos los vcs_info
s en su *.zsh-theme
y reemplazarlos con comandos git
nativos.
Por ejemplo, pellizco mi agnoster.zsh-theme
por:
- comentar / eliminar todas las líneas que tienen
vcs_info
, Editar código en la función
prompt_git()
desde:ref="$vcs_info_msg_0_"
aref="$(git branch 2>/dev/null | grep -Po ''(?<=/* ).*$'')"
Así que, básicamente, simplemente deshabilité todas vcs_info
acciones de vcs_info
y, en cambio, uso un comando git
nativo para verificar los estados del repositorio. Como resultado, aún puedo ver mi útil indicador de git con una velocidad tan rápida como trabajar en un directorio que no es de git. Con esta pequeña modificación, mi zsh puede trabajar 4-5 veces más rápido en los repositorios de git.
Nota: use grep de GNU no grep de BSD.