El estado de Git toma mucho time para completarse

Estoy usando git para administrar files en un directory local en una máquina con Windows. Aquí no se trata de una networking, no estoy presionando o tirando hacia / desde otra máquina. Mi directory tiene quizás 100 files, todos files de testing, bastante pequeños. Cuando ejecuto el git status , toma entre 20 y 30 segundos para completarse. ¿Esto es normal? ¿Hay algo que pueda hacer para acelerarlo, o una mejor forma de ver cuál es el estado de mi repository (files modificados, files sin seguimiento, etc.)? Otros commands de git parecen completarse mucho más rápido.

¿Has probado git gc ? Esto limpia el cruft del git repo.

¿Estás usando algún tipo de software de protección contra virus? Tal vez eso está interfiriendo con las cosas. git es muy rápido para mí en windows con repositorys de miles de files.

En un problema similar, descubrí que tener un repo de git en un directory debajo de mi repository git existente causaba una desaceleración masiva.

Moví el repo de git secundario a otro lugar y ahora la velocidad es rápida.

¿Has intentado volver a empacar? git-rehacer .

De lo contrario, intente duplicar el directory y eliminar la carpeta .git en el directory duplicado. Luego crea un nuevo directory git y mira si todavía es lento.

Si todavía es lento, parece un problema de sistema o hardware. Git termina el estado en cientos de files para mí en less de 5 segundos.

Por alguna razón, el git status es particularmente lento después de mover o copyr la carpeta del repository a una nueva location.

Las ejecuciones posteriores suelen ser más rápidas en este caso.

En mi caso, la lentitud fue causada por la ejecución git status como un usuario diferente del propietario de los files en el proyecto.

Si bien no es aplicable en todos los casos, un simple chown para su usuario actual puede hacer el truco.

Otro aspecto del git status de git status que se mejorará (en Git 2.14.x / 2.15, cuarto trimestre de 2017) es cuando también muestra files ignorados ( git status --ignonetworking ignorado)

" git status --ignonetworking ", cuando se da count de que se ignora un directory sin ninguna ruta rastreada, todavía se enumeran todas las routes ignoradas en el directory, lo cual es innecesario.
La ruta de código se ha optimizado para evitar esta sobrecarga.

Ver commit 5aaa7fd (18 Sep 2017) por Jameson Miller ( jamill ) .
(Fusionado por Junio ​​C Hamano – gitster – in commit 075bc9c , 29 de septiembre de 2017)

Mejora el performance del git status --ignonetworking de git status --ignonetworking

Mejore el performance de la lógica de listdo de directorys cuando quiera enumerar directorys ignorados no vacíos. Para mostrar directorys ignorados que no están vacíos, la lógica existente iterará recursivamente a través de todos los contenidos de un directory ignorado.
Este cambio introduce la optimization para detener la iteración a través de los contenidos una vez que encuentra el primer file. Esto puede tener una mejora significativa en el performance de 'git status -ignonetworking' en repositorys con una gran cantidad de files en directorys ignorados.

Para ver un ejemplo de la diferencia de performance en un repository de ejemplo con 196,000 files en 400 directorys ignorados:

 | Command | Time (s) | | -------------------------- | --------- | | git status | 1.2 | | git status --ignonetworking (old) | 3.9 | | git status --ignonetworking (new) | 1.4 | 

Intente comenzar con una copy nueva de su pago y envío.

 git clone myrepo mynewrepo 

y luego hacer el estado de git en mynewrepo.

Alternativamente, y si eres más valiente, limpia la basura de tu pago existente.

 git clean -dfx 

Esto evita que git tenga que escanear algunos (posiblemente grandes) sets de files ignorados o no registrados.