Msysgit bash es terriblemente lento en Windows 7

84

Me encanta git y lo uso en OS X casi constantemente en casa. En el trabajo, usamos svn en Windows, pero queremos migrar a git tan pronto como las herramientas hayan madurado por completo (no solo TortoiseGit , sino también algo parecido a la integración de Visual Studio realmente agradable proporcionada por VisualSVN ). Pero yo divago...

Recientemente instalé msysgit en mi máquina con Windows 7, y cuando uso la versión incluida de bash, es tremendamente lento. Y no solo las operaciones de git; cleartarda unos cinco segundos . AAAAH!

¿Alguien ha experimentado un problema similar?


Editar : Parece que msysgit no funciona bien con UAC y podría ser solo un pequeño descuido de diseño resultante de desarrollar en XP o ejecutar Vista o 7 con UAC desactivado; iniciar Git Bash usando Run as administratorresultados a la velocidad del rayo que veo con OS X (o en 7 después de iniciar Git Bash sin una conexión de red; consulte la respuesta de @Gauthier).

Edición 2 : ¡ AH HA! Mira mi respuesta.

Kevin L.
fuente
No 5 segundos lento, no. Será más lento, pero más rápido que la versión Cygwin.
Yann Ramin
@theatrus: De hecho, utilicé un cronómetro hace un momento. El promedio fue de 3.8 segundos. Así que tienes razón, pero algo aún anda muy mal.
Kevin L.
Otra desaceleración de msysgit es una versión antigua de OpenSSH que se documenta aquí darrell.mozingo.net/2011/09/29/…
JodaStephen
Vea la página wiki de msysgit en esto: github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-slow
Drew Noakes
1
posible duplicado de Git / Bash es extremadamente lento en Windows 7 x64
Joshua Taylor

Respuestas:

54

Puede acelerar significativamente Git en Windows ejecutando tres comandos para establecer algunas opciones de configuración:

git config --global core.preloadindex true
git config --global core.fscache true
git config --global gc.auto 256

Notas:

  • core.preloadindex realiza operaciones del sistema de archivos en paralelo para ocultar la latencia (actualización: habilitada de forma predeterminada 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 /

shoelzer
fuente
Esta debería ser ahora la respuesta aceptada. ¡Funciona de maravilla!
krlmlr
8
Esto no funciona para mi. Mi git bash todavía tiene una demora de 1-2 segundos después de que doy un comando.
Jaskey
Funcionó como un encanto para mí; bajé mi estado de git en un gran repositorio de 13 segundos a 0,7 segundos
noelob
2
git config --global core.fscache trueno hizo nada por mí; sin embargo, git config core.fscache truefuncionó. De acuerdo con esto , es porque core.fscache es una configuración por repositorio.
David Merriman
2
@DavidMerriman El comentario "por repositorio" simplemente indica que puede cambiar esta configuración en repositorios individuales. (Lo cual es cierto para todas las configuraciones, así que no sé por qué se menciona en absoluto). El comentario no significa que fscache solo funcione como una configuración por repositorio. La configuración global se aplica a todos los repositorios en una máquina a menos que la configuración por repositorio la anule.
shoelzer
37

La solución para la lentitud en Vista o 7 parece ejecutar Git Bash usando Run as administrator(o deshabilitando UAC para el acceso directo de Git Bash ... o deshabilitando UAC por completo ). La diferencia es la noche y el día y usar git en 7 es increíble de nuevo.

Esto parece estar relacionado con un problema conocido y, como especulé , XP como entorno de desarrollo para msysgit es parcialmente responsable.

Kevin L.
fuente
Buena pista (incluso si no fue intencional :)). Ejecutar "git svn clone" en Windows 2008 R2 con 1.7.4 fue terriblemente lento para mí (hay más de 5000 confirmaciones en SVN y me tomó semanas obtener la mitad) ... Me diste la idea de probarlo en su entorno "nativo", en XP, y en realidad es muy rápido. ¡Gracias!
bdrajer
1
He desactivado UAC e intenté ejecutarlo como administrador, y aún así, cada comando que ingreso en Git Bash tarda unos 5 segundos en ejecutarse (incluso lsen un directorio prácticamente vacío)
Robin Winslow
4
La respuesta en esta pregunta funcionó para mí en cambio: stackoverflow.com/questions/4485059/…
Robin Winslow
Mover repositorios a una partición que no es del sistema también mostró grandes aumentos de rendimiento para mi equipo y evitó los problemas aleatorios de "no se puede crear un archivo" al finalizar la compra.
Laurence
1
Probé muchas soluciones ... esta (ejecutándose como administrador) finalmente funcionó para mí ... ahora mi git es increíblemente rápido una vez más ... gracias ... :)
AweSIM
14

Para mí, el problema fue el uso de __git_ps1 en el indicador de shell, supongo que debido al acceso lento al disco en msysgit.

La solución fue eliminar $ (__ git_ps1) de las líneas PS1 = ... en / etc / profile

Prueba rápida si se aplica esta solución: en un shell de git, escribe export PS1 = '$' y verifica la velocidad de tus operaciones.

Chrisxxyy
fuente
¡Gracias! Este resultó ser mi problema en Windows XP. Ver stackoverflow.com/q/5851611/200688
AndyL
2
Probablemente pueda dejar __git_ps1activo, si deshabilita la configuración SHOWDIRTYSTATE y / o SHOWUNTRACKEDFILES, consulte stackoverflow.com/a/4203968/321973
Tobias Kienzler
Esto fue todo lo que necesité para mí en Windows 7. ¡Particularmente afortunado ya que esta máquina está bloqueada sin privilegios de administrador!
Aire
12

Probé casi todos los consejos aquí (incluido el de mi otra respuesta) en una nueva máquina, pero no funcionaron, Git sigue siendo muy lento.

Luego eché un vistazo al software de escaneo de virus (que estaba preinstalado): desactivé el escaneo en tiempo real de McAfee Security Center , y listo: ¡git ahora es increíblemente rápido! El tiempo necesario para "git svn rebase" se redujo de 30 a 5 segundos (!).

Espero que esto sea útil para otras personas que aún tienen problemas con Git lento en Windows, perdí horas resolviendo esto.

Tom De Leu
fuente
4
¡Mi Git Bash también comienza lento antes, después de que agregué toda la ruta de instalación de git a la ruta de exclusión de Avast! Anti-Virus Suite, git bash comienza en menos de 0.5s
zhxchen17
¡Esta fue la respuesta para mí! Yo uso AVG Free. Lo desactivé durante 10 minutos, de repente el bash muy lento es muy rápido.
Mörre
Para aquellos que usan Windows Defender, puede hacer que excluya una carpeta o proceso. Consulte support.microsoft.com/en-us/help/4028485/…
Ehtesh Choudhury
9

Por desgracia, 'Ejecutar como administrador' no funcionó para mí, pero como Kevin L descubrió, desconectar el adaptador de red, iniciar git bash y luego volver a conectar funcionó bien. Así que envolví esto en un script por lotes y le puse un acceso directo en mi menú Inicio, marcado para ejecutarse como administrador:

netsh interface set interface "Local Area Connection" DISABLED
cd "%USERPROFILE%\Documents\Visual Studio 2010\Projects"
start cmd /c ""C:\Program Files\Git\bin\sh.exe" --login -i"
netsh interface set interface "Local Area Connection" ENABLED

Funciona de maravilla siempre que recuerde que mi red se corta momentáneamente.

(Win 7 Professional SP1, Git versión 1.7.8-preview20111206)

Daniel Hume
fuente
5

Un colega mío tenía este comportamiento siempre que se ejecutaba Outlook. Intentando matar a Outlook y probar de nuevo.

También puede intentar probar:

  • sin conexión a ninguna red,
  • sin antivirus funcionando,
  • sin ningún otro programa en ejecución.
Gauthier
fuente
3
Ni Outlook ni el antivirus parecen tener ningún efecto, pero si desactivo mi conexión de red y luego inicio git, es muy rápido (léase: "Unix"), incluso después de reconectarme. Interesante ...
Kevin L.
Sí. Y git bash permanece rápido (hasta que lo cierro y abro otra instancia).
Kevin L.
2
La conexión de red también funcionó para mí. Me pregunto qué tiene que ver con la conexión de red. Y, extrañamente, funciona perfectamente bien en la red de mi hogar, pero se niega a trabajar en la red de mi oficina.
Sarath
Esto solucionó mi problema en Windows 7 Professional de 64 bits en un iMac nuevo. ¡Salud!
Longda
+1 antivirus como se sugirió fue la causa en mi sistema particular. Windows 7 x64 ultimate. Lamentablemente, UAC (mencionado en otro lugar) no hizo ninguna diferencia. gracias a todos
MickyD
3

Descubrimos que, cuando se ejecuta en ciertas cuentas de usuario, las instancias de git.exe separadas se bloquean en una llamada a WaitForSingleObject(), por lo que solo una única operación de git.exe podría ejecutarse de manera efectiva a la vez. Cambiar la cuenta de usuario solucionó este problema.

Detalles aquí: https://stackoverflow.com/a/13054022

Matthew Skelton
fuente
3

Tengo MacAffee y decirle que excluya el directorio .git y todos los subdirectorios del escaneo en tiempo real solucionó el problema de rendimiento.

Alex Brown
fuente
1
¿Puede excluir todo el disco duro? ;-).
Peter - Reincorpora a Monica
1

Como se encuentra en este problema , la ejecución con la virtualización de UAC desactivada (no es necesario deshabilitar UAC por completo) marca una gran diferencia.

Esta publicación explica cómo desactivarlo (consulte la parte inferior de la publicación, solo una configuración de registro).

En un repositorio SVN (grande) al que me estoy conectando, el cambio anterior redujo el tiempo necesario para "git svn rebase" de 15 a 5 segundos, una mejora de factor 3.

Tom De Leu
fuente
Este problema (rastreador) se ha cerrado, el nuevo problema con respecto a esto es: github.com/msysgit/git/issues/94
childno͡.de
1

Una alternativa a jugar con el UAC de Windows 7 puede ser instalar mysysgit fuera de la carpeta Archivos de programa. Por ejemplo, en lugar de "C: \ Archivos de programa (x86) \ Git", intente instalar en "C: \ git"

Intenté jugar con los controles de 'Ejecutar como administrador' y UAC en vano, pero me di por vencido y comencé una nueva instalación. Antes obtenía unos 15 KB / s como máximo, pero ahora supera los 60 KB / s.

Frank Yin
fuente
1

Si apagar UAC no mejora el rendimiento, intente apagar el controlador luafv. Esto funcionó para mí después de probar casi todo en esta página y un par de preguntas similares. Git ha pasado de ser inusualmente lento a bastante decente.

Abra 'regedit' y busque la clave de registro

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/luafv

Cambie el valor de Start2 a 4.

Encontré los detalles sobre cómo deshabilitar luafv aquí . Tenga en cuenta que personalmente no tengo idea de lo que luafves o hace. Esa página ofrece varias advertencias sobre cosas malas que podrían suceder si la apaga, lo que probablemente debería tomar en serio.

EDITAR: El comentario a continuación señaló que entendí esto al revés (el enlace lo tiene al revés). Ahora está arreglado. Lo siento por las personas cuyos registros destruí :)

jwg
fuente
El mío está establecido en 2 de forma predeterminada. Sigue siendo bastante lento.
imanuelcostigan
@imanuelc: irónicamente, el mío también lo es ahora (en una computadora nueva) y también es lento.
jwg
2
Esto es incorrecto. Debe cambiarse de 2 a 4. 2 significa inicio automático. 4 significa discapacitado.
richb
1

He estado solucionando este problema por un tiempo y me costó identificar la fuente del problema. Al final encontré dos cosas que tuvieron un impacto dramático:

  • Desactivación del servicio de búsqueda de Windows. Esto tuvo un efecto dramático en el rendimiento.
  • Cerrar extensiones de Git. Tener la ventana Examinar de extensiones de Git abierta en segundo plano hizo que los tiempos de ejecución del comando Cygwin git aumentaran en un factor aparentemente aleatorio de hasta alrededor de 10.
bjos
fuente
0

El problema aquí podría ser la finalización de bash si está habilitada, que es un poco más lenta en Windows que en Linux.

Intente configurar la variable PS1 en algo simple como "$", y vea si esto acelera las cosas. Si es así, tenga en cuenta que ha habido algunas optimizaciones en la finalización de bash en versiones recientes de git. Quizás necesite actualizar.

kusma
fuente
1
Estoy ejecutando la versión más reciente absoluta de vanguardia (vea mis comentarios sobre la respuesta de VonC, arriba). Pero le daré una oportunidad a esto.
Kevin L.
1.7.0.2 no es necesariamente la vanguardia en este contexto. Las optimizaciones de las que estoy hablando han ocurrido en upstream-git. No estoy seguro de si les esperaba la versión 1.7.0.2 de Git para Windows o no.
kusma
0

Esto funcionó para mí. No espere que sea una solución única para todos.

Verifique la variable de entorno $ HOME en bash y windows. Si apunta a una cuenta de usuario, verifique el perfil / permisos de Windows del usuario. Cambie la cuenta de usuario o $ HOME según corresponda.

Deepak
fuente
6
¿Podría dar más detalles sobre estos ominosos perfiles / permisiones, por favor?
Tobias Kienzler
0

He 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. Dado que UAC está desactivado en mi sistema, la explicación de que está intentando escribir / eliminar algo en el directorio de archivos del programa tiene más sentido para mí.

En cualquier caso, resolví 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 zip para que el instalador zip funcione. También tuve que agregar manualmente ese directorio a la ruta de mi sistema.

La actuación está bien ahora. Aunque está instalado en el directorio Archivos de programa (x86), para el que no tengo permisos como usuario limitado, no parece sufrir el mismo problema. Atribuyo esto al hecho de que la versión portátil es un poco más conservadora en la que escribe / elimina archivos, que probablemente sea el caso, o a la actualización de 1.7 a 1.8. No voy a tratar de precisar cuál es la razón, basta con decir que ahora funciona mucho mejor.

Archivo binario
fuente
0

Es posible que desee intentar desinstalar msysgit, reiniciar Windows, instalar la última versión de msysgit. Pareció hacerme el truco. Encontré esta sugerencia aquí:

https://stackoverflow.com/a/4506192/1413941

EDITAR

PD: Ya tenía UAC deshabilitado antes de tener problemas de Git lentos, por lo que no sé si es necesario deshabilitar UAC o no para que Git funcione rápidamente.

Herr Grumps
fuente
0

La mejor solución es ejecutarla como administrador, como se señaló. Sin embargo, otra opción para hacer que el estado de git sea rápido, al menos, es trustctime = false . Antes, ese estado de git tardaba unos 30 segundos y después es la misma cantidad que se muestra en la salida: tardaron X segundos en ...

TS '
fuente
0

También puede obtener un aumento importante del rendimiento si cambia la siguiente configuración de git:

git config --global status.submoduleSummary false

Al ejecutar el git statuscomando simple en Windows 7 x64, mi computadora tardó más de 30 segundos en ejecutarse. Una vez definida esta opción, el comando es inmediato.

Activar el rastreo propio 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

Olivier
fuente
-4

Probablemente sea una cuestión del indicador que analiza su repositorio de Git. Puede probar haciendo "borrar" en algún lugar fuera de un repositorio de Git. Y puede acelerarlo parcheando git-completation.bash o jugando trucos con core.filemode.

En cuanto a la integración de Visual Studio: esto es de código abierto. Es injusto esperar que otros trabajen gratis para usted.

También me parece bastante divertido no hacer la pregunta en la lista de correo msysGit, pero ahora estoy divagando.

Dscho
fuente
5
Flaming en StackOverflow no debe tolerarse. Por favor, intente mantener el discurso más civiles
phord
1
Es gracioso. Mi comentario fue el único comentario con información técnica concreta. La oferta para ayudar a solucionar el problema sigue abierta, ¿sabe? Y, por supuesto, estoy bastante molesto porque el problema se planteó aquí, en stackoverflow, que no superviso y que otros me tuvieron que señalar. Hubiera preferido escuchar sobre el tema directamente. No sé ustedes, pero me parece injusto que ni siquiera se notifiquen los problemas al proyecto original.
Dscho
Dos años después, estoy de acuerdo. Fui demasiado duro. Lo siento, Dscho. Las listas de correo de desarrolladores de git son realmente útiles.
phord
2
@Dscho, debe comprender que las personas a menudo publican aquí primero porque quieren verificar que no hay algún problema de configuración o plataforma, que no es un error en Git, lo que causa su problema.
jwg