He estado usando Git tanto en Windows como en Ubuntu durante el desarrollo de un pequeño proyecto, frecuentemente cambiando de un lado a otro entre los dos. El problema es que Git Bash constantemente se vuelve lento.
Cuando digo lento, quiero decir que la ejecución cd
demora entre 8 y 25 segundos, los git
comandos de ejecución demoran entre 5 y 20 segundos y, en ls
ocasiones , pueden tardar hasta 30 segundos. No hace falta decir que esto no es divertido, por no mencionar improductivo. Sé que Git es más lento en Windows, pero esto es ridículo.
La única solución que ha funcionado, temporalmente, para mí ha sido deshabilitar mi conexión de red (como se sugiere en esta respuesta ), iniciar Git Bash y luego volver a conectarme. A veces continúa ejecutándose rápidamente durante días después de hacerlo, pero el rendimiento siempre se degrada con el tiempo. He rastreado el grupo de discusión msysgit, Stack Overflow, la lista de problemas de msysgit, etc. por semanas, pero no he podido encontrar soluciones que funcionen.
Hasta ahora, he intentado:
- Agregar carpetas de proyectos y Git a la lista de exclusión del escáner de virus
- Desactivar completamente mi antivirus (Kaspersky IS 2011)
- Asegurarse de que Outlook no se esté ejecutando (Outlook 2007)
- Cerrar todas las demás aplicaciones
- Ejecutando Git Bash como administrador
- Deshabilitar la conexión de red, iniciar Git Bash y mantener la conexión deshabilitada
- Deshabilitar la conexión de red, iniciar Git Bash, volver a habilitar la conexión (funciona solo ocasionalmente)
- Corriendo
git gc
- Y combinaciones de lo anterior
Leí que un par de personas tuvieron éxito al deshabilitar la finalización de Bash, pero idealmente me gustaría mantener eso activo. La versión de msysgit es 1.7.3.1-preview20101002 y el sistema operativo es Windows 7 x64. Ejecutar las mismas cosas en Linux es, como era de esperar, muy rápido. Usaría Linux exclusivamente, pero también necesito ejecutar cosas en Windows (ciertas aplicaciones, pruebas, etc.).
¿Alguien ha encontrado un problema similar? Si es así, ¿cuál fue el problema subyacente y cuál fue la solución (si la hubo)?
Esto se extiende más allá de los repositorios de Git, pero solo como referencia, los repositorios con los que he estado usando Git han sido bastante pequeños: ~ 4-50 archivos como máximo.
Respuestas:
Puede acelerar significativamente Git en Windows ejecutando tres comandos para configurar algunas opciones de configuración:
Notas:
core.preloadindex
realiza operaciones del sistema de archivos en paralelo para ocultar la latencia (actualización: habilitada por defecto en Git 2.1)core.fscache
corrige problemas de UAC para que no necesite ejecutar Git como administrador (actualización: habilitada de forma predeterminada en Git para Windows 2.8)gc.auto
minimiza el número de archivos en .git /fuente
¿Tiene información de Git que se muestra en su solicitud de Bash? Si es así, tal vez sin querer esté haciendo demasiado trabajo en cada comando. Para probar esta teoría, intente el siguiente cambio temporal en Bash:
fuente
$(__git_ps1)
... eliminar esto hace que todo sea súper rápidoC:\Program Files (x86\Git\etc\profile
y comente el if-then-else donde__git_ps1
se agregaPS1
.Mi directorio de inicio de Windows está en la red, y sospeché que los comandos de Git Bash estaban buscando allí primero. Efectivamente, cuando miré
$PATH
, aparece en/h/bin
primer lugar, donde/h
hay un recurso compartido en un servidor de archivos de Windows, a pesar de/h/bin
que no existe.Edité
/etc/profile
y comenté el comando de exportación que lo coloca primero en$PATH
:Esto hizo que mis comandos se ejecuten mucho más rápido, probablemente porque Git Bash ya no busca ejecutables en la red. Mi
/etc/profile
erac:\Program Files (x86)\Git\etc\profile
.fuente
HOME="$(cd "$HOME" ; pwd)"
aHOME="$(cd "$USERPROFILE" ; pwd)"
, y ahora todo es increíblemente rápido. Gracias por el consejo.Encontré que la unidad de red era el problema de rendimiento.
HOME
apuntaba a un recurso compartido de red lento. No pude anular,HOMEDRIVE
pero eso no es un problema por lo que he visto.Establezca la variable de entorno haciendo clic derecho en su computadora en el escritorio -> propiedades -> Configuración avanzada del sistema -> Variables de entorno Agregar a la sección de variables de usuario
fuente
En una extensión de la respuesta de Chris Dolan, utilicé la siguiente
PS1
configuración alternativa . Simplemente agregue el fragmento de código a su ~ / .profile (en Windows 7: C: /Users/USERNAME/.profile).Esto conserva el beneficio de un shell de color y la visualización del nombre de la rama actual (si está en un repositorio Git), pero es significativamente más rápido en mi máquina, de ~ 0.75 sa 0.1 s.
Esto se basa en esta publicación de blog .
fuente
__git_ps1
incluye información de estado, no solo el nombre de la sucursal. Por ejemplo, si está en un estado de cabeza separada, en el directorio git, en un repositorio desnudo, en el medio de la selección de cerezas, rebase o fusión ... Esto será más rápido, pero puede haber ocasiones en las que fallaría Esta información adicional, especialmente como un principiante de Git.Si bien su problema puede estar basado en la red, personalmente he acelerado
git status
diez veces mis llamadas locales (más de 7 segundos a 700 ms) haciendo dos modificaciones. Esto está en un repositorio de 700 MB con 21,000 archivos y un número excesivo de archivos binarios grandes.Uno es habilitar precargas de índice paralelas. Desde un símbolo del sistema:
git config core.preloadindex true
Esto cambió
time git status
de 7 segundos a 2.5 segundos.También deshabilité el UAC y el controlador "luafv" (se requiere reiniciar). Esto deshabilita un controlador en Windows Vista, 7 y 8 que redirige los programas que intentan escribir en ubicaciones del sistema y en su lugar redirige esos accesos a un directorio de usuarios.
Para ver una discusión sobre cómo esto afecta el rendimiento de Git, lea aquí: https://code.google.com/p/msysgit/issues/detail?id=320
Para deshabilitar este controlador, en regedit, cambie la tecla "inicio"
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/luafv
a 4 para deshabilitar el controlador. Luego, coloque UAC en su configuración más baja, "nunca notificar".Si la desactivación de este controlador lo hace desconfiar (debería), se está ejecutando una alternativa en una unidad (o partición) diferente a la partición de su sistema. Aparentemente, el controlador solo se ejecuta con acceso a archivos en la partición del sistema. Tengo un segundo disco duro y veo resultados idénticos cuando se ejecuta con esta modificación del registro en mi disco C como lo hago sin él en el disco D.
Este cambio lleva
time git status
de 2.5 segundos a 0.7 segundos.También es posible que desee seguir https://github.com/msysgit/git/pull/94 y https://github.com/git/git/commit/d637d1b9a8fb765a8542e69bd2e04b3e229f663b para ver qué trabajo adicional está en marcha para problemas de velocidad en Windows .
fuente
Parece que desinstalar completamente Git, reiniciar (la cura clásica de Windows) y reinstalar Git fue la cura. También eliminé todos los archivos de configuración de bash que quedaron (se crearon manualmente). Todo vuelve a ser rápido.
Si por alguna razón la reinstalación no es posible (o deseable), entonces definitivamente trataría de cambiar la variable PS1 referenciada en la respuesta de Chris Dolan ; resultó en aceleraciones significativas en ciertas operaciones.
fuente
Resolví mi problema de Git lento en Windows 7 x64 iniciando cmd.exe con "Ejecutar como administrador".
fuente
Vi una mejora decente al establecer core.preloadindex en true como se recomienda aquí .
fuente
Como se señaló en las respuestas de Chris Dolan y Wilbert, PS1 te ralentiza .
En lugar de deshabilitar completamente (como lo sugiere Dolan) o usar el script ofrecido por Wilbert, uso una "PS1 tonta" que es mucho más rápida.
Utiliza
(git symbolic-ref -q HEAD || git rev-parse --short HEAD) 2> /dev/null
:En mi Cygwin, esto es más rápido que la respuesta "fast_Git_PS1" de Wilbert : 200 ms frente a 400 ms, por lo que reduce un poco su lentitud inmediata.
No es tan sofisticado como
__git_ps1
, por ejemplo, no cambia el indicador cuando ingresa al directorio .git, etc., pero para el uso diario normal es lo suficientemente bueno y rápido.Esto se probó en Git 1.7.9 (Cygwin, pero debería funcionar en cualquier plataforma).
fuente
--short
opción para no imprimirrefs/heads/
--short
elsymbolic-ref
comando.También puede obtener un aumento de rendimiento muy subsiguiente al cambiar la siguiente configuración de Git:
Al ejecutar el
git status
comando simple en Windows 7 x64, mi computadora tardó más de 30 segundos en ejecutarse. Después de definir esta opción, el comando es inmediato.La activación del seguimiento de Git como se explica en la siguiente página me ayudó a encontrar el origen del problema, que puede diferir en su instalación: https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so- lento
fuente
Estaba teniendo el mismo problema, tanto en Git Bash como en Git GUI. Ambos programas solían funcionar bien, pero luego se ralentizaron aleatoriamente y no pude entender por qué.
Resulta que fue Avast. Avast ha causado que sucedan cosas extrañas en varios programas (incluidos los programas que escribo), por lo que lo desactivé por un segundo y, efectivamente, Bash ahora se ejecuta tan rápido como lo hace en Linux. Acabo de agregar la carpeta de archivos del programa Git (
C:\Program Files\Git
) a la lista de exclusión de Avast, y ahora se ejecuta tan rápido como en Linux.Y sí, me doy cuenta de que el software antivirus no fue el problema en la publicación original, pero lo pondré aquí en caso de que sea útil para alguien.
fuente
Además de estas otras respuestas, he acelerado proyectos con múltiples submódulos mediante el uso de recuperación de submódulos paralelos (desde Git 2.8 a principios de 2016).
Esto se puede hacer
git fetch --recurse-submodules -j8
y configurar congit config --global submodule.fetchJobs 8
, o con la cantidad de núcleos que tenga / quiera usar.fuente
Si usa Git desde cmd, intente ejecutarlo desde Git Bash. En cmd, git.exe es en realidad un contenedor que configura el entorno correcto cada vez que lo inicia, y solo entonces inicia el git.exe real. Puede tomar hasta el doble de tiempo del necesario para hacer lo que desea. Y Git Bash configura el entorno solo cuando se inicia.
fuente
Solo desactivar AMD Radeon Graphics (o Intel Graphics) en Device Manager me ayudó.
Encontré la respuesta aquí: /superuser/1160349/git-is-extremely-slow-on-windows# =
fuente
Respuestas combinadas:
(<branch_name>)
o(<sha>)
Resultado:
fuente
core.commitGraph=true
desde blogs.msdn.microsoft.com/devops/2018/06/25/… y otros desde blogs.msdn.microsoft.com/devops/tag/gitHe encontrado el mismo problema al ejecutar Git para Windows (msysgit) en Windows 7 x64 como una cuenta de usuario limitada durante bastante tiempo.
Por lo que he leído aquí y en otros lugares, el tema común parece ser la falta de privilegios administrativos y / o UAC. Como UAC está apagado en mi sistema, la explicación de que está tratando de escribir / eliminar algo en el directorio de archivos del programa tiene más sentido para mí.
En cualquier caso, he resuelto mi problema instalando la versión portátil de Git 1.8 con zipinstaller. Tenga en cuenta que tuve que descomprimir el archivo de distribución .7z y volver a empaquetarlo como un archivo ZIP para que el instalador zip funcione. También tuve que agregar manualmente ese directorio a la ruta de mi sistema.
El rendimiento está bien ahora. Aunque está instalado en el
Program Files (x86)
directorio, para el cual no tengo permisos como usuario limitado, no parece sufrir el mismo problema.Le atribuyo esto al hecho de que la versión portátil es un poco más conservadora en el lugar donde escribe / elimina archivos, que es probablemente el caso, o a la actualización de 1.7 a 1.8. No voy a tratar de determinar cuál es la razón, basta decir que ahora funciona mucho mejor, incluido Bash.
fuente
En mi caso, en realidad fue el antivirus Avast lo que llevó a Git Bash e incluso a PowerShell a ser muy lento.
Primero intenté deshabilitar Avast durante 10 minutos para ver si mejoraba la velocidad y lo hizo. Luego, agregué todo el directorio de instalación de Git Bash como una excepción en Avast, para Leer, Escribir y Ejecutar. En mi caso eso fue
C:\Program Files\Git\*
.fuente
Nada de lo anterior fue capaz de ayudarme. En mi escenario, el problema se mostraba así:
ll
comando era lento (tardaba unos 3 segundos en ejecutarse)ll
comando posterior se ejecutó al instante, pero solo si dentro de los 45 segundos desde el comando ls anterior .Cuando se trataba de depurar con Process Monitor , se descubrió que antes de cada comando había una solicitud de DNS.
Entonces, tan pronto como desactivé mi firewall (Comodo en mi caso) y dejé que el comando ejecutara, el problema desapareció. Y no regresa cuando el firewall se volvió a encender. Con la primera oportunidad, actualizaré esta respuesta con más detalles sobre qué proceso estaba haciendo una solicitud de bloqueo de DNS y cuál era el objetivo.
BR, G
fuente
ll
ser un alias paralog
? Parece extraño que haya solicitudes de DNS para eso.ll
es un alias parals -l
. Y todavía es extraño activar una solicitud de DNS de todos modos ... Mientras tanto, todavía estoy esperando que este problema vuelva a aparecer para agregar más detalles en la respuesta.En mi caso, el acceso directo de Git Bash se estableció en
Start in:%HOMEDRIVE%%HOMEPATH%
(puede verificar esto haciendo clic derecho en Git Bash y seleccionando propiedades). Esta fue la unidad de red.La solución es hacer que señale
%HOME%
. Si no lo tiene, puede configurarlo en las variables de entorno y ahora Git Bash debería ser muy rápido.fuente
También tuve problemas con la lentitud de git PS1, aunque durante mucho tiempo pensé que era un problema de tamaño de la base de datos (gran repositorio) e intenté varios
git gc
trucos y busqué otras razones, como tú. Sin embargo, en mi caso, el problema era esta línea:Hacer el
git status
para cada línea de estado de la línea de comando fue lento. Ay. Fue algo que escribí a mano. Vi que era un problema cuando probé elcomo se menciona en una respuesta aquí. La línea de comando estaba a la velocidad del rayo.
Ahora estoy usando esto:
Desde la línea Post PS1 de Stack Overflow con git rama y colores actuales y funciona bien. Nuevamente tenga una línea de comando Git rápida.
fuente
Un compañero de trabajo mío tuvo problemas con Git en Windows (7)
git status
checkout
yadd
fue rápido, perogit commit
tardó años.Todavía estamos tratando de encontrar la causa raíz de esto, pero clonar el repositorio en una nueva carpeta solucionó su problema.
fuente
Como muchos dijeron, esto se debe a que
stash
es un script de shell en Windows, pero desde Git 2.18.0, el instalador de Windows tiene una opción para una característica experimental de una versión integrada de stash mucho más rápida (~ 90%) - https: / /github.com/git-for-windows/build-extra/pull/203 .fuente
stash
, pero la tuya es la primera publicación que mencionastash
específicamente. ¿Afecta a otras operaciones de Git?stash
y / orebase
usar un ejecutable nativo para un mejor rendimiento, pero con cualquier cosa en la vista previa siempre hay una pequeña posibilidad de que pueda haber un pequeño efecto secundario.