windows - origin - git pull remote
Git pull se cuelga aleatoriamente (3)
Por favor, prefiera ssh sobre https. Supongo que ya tienes GitBash para que puedas seguir this tutorial. Asegúrese de clonar el repositorio en un nuevo directorio para no perder la configuración actual de https ni los cambios locales.
Si el problema persiste, aunque es muy probable que se trate de un problema de red, puede considerar la depuración ssh que se muestra en esta answer .
Cuando se usa git en ventanas normalmente (como git push
y git pull
), a veces será muy lento. La ejecución de git pull
una y otra vez vuelve dentro de dos segundos la mayor parte del tiempo, pero alrededor de 1/6 de los intentos toma aproximadamente un minuto.
He establecido git config --global core.preloadindex
y git config --global core.fscache
en true.
Ejemplos después de ejecutar set GIT_TRACE=1
Lento:
$ git pull
14:11:03.166594 git.c:371 trace: built-in: git ''pull''
14:11:03.168594 run-command.c:350 trace: run_command: ''fetch'' ''--update-head-ok''
14:11:03.186596 git.c:371 trace: built-in: git ''fetch'' ''--update-head-ok''
14:11:03.189596 run-command.c:350 trace: run_command: ''git-remote-https'' ''origin'' ''https://[...].git''
14:11:03.204598 run-command.c:350 trace: run_command: ''git credential-manager get''
14:11:46.400917 git.c:607 trace: exec: ''git-credential-manager'' ''get''
14:11:46.400917 run-command.c:350 trace: run_command: ''git-credential-manager'' ''get''
14:11:47.828059 run-command.c:350 trace: run_command: ''git credential-manager store''
14:11:47.869064 git.c:607 trace: exec: ''git-credential-manager'' ''store''
14:11:47.869064 run-command.c:350 trace: run_command: ''git-credential-manager'' ''store''
14:11:47.980075 run-command.c:350 trace: run_command: ''rev-list'' ''--objects'' ''--stdin'' ''--not'' ''--all'' ''--quiet''
14:11:47.991076 run-command.c:350 trace: run_command: ''rev-list'' ''--objects'' ''--stdin'' ''--not'' ''--all'' ''--quiet''
14:11:47.999077 git.c:371 trace: built-in: git ''rev-list'' ''--objects'' ''--stdin'' ''--not'' ''--all'' ''--quiet''
14:11:48.005077 run-command.c:1130 run_processes_parallel: preparing to run up to 1 tasks
14:11:48.005077 run-command.c:1162 run_processes_parallel: done
14:11:48.005077 run-command.c:350 trace: run_command: ''gc'' ''--auto''
14:11:48.014078 git.c:371 trace: built-in: git ''gc'' ''--auto''
14:11:48.017078 run-command.c:350 trace: run_command: ''merge'' ''FETCH_HEAD''
14:11:48.025079 git.c:371 trace: built-in: git ''merge'' ''FETCH_HEAD''
Already up-to-date.
Rápido:
$ git pull
14:12:25.432820 git.c:371 trace: built-in: git ''pull''
14:12:25.434820 run-command.c:350 trace: run_command: ''fetch'' ''--update-head-ok''
14:12:25.451821 git.c:371 trace: built-in: git ''fetch'' ''--update-head-ok''
14:12:25.454822 run-command.c:350 trace: run_command: ''git-remote-https'' ''origin'' ''https://[...].git''
14:12:25.472824 run-command.c:350 trace: run_command: ''git credential-manager get''
14:12:25.497826 git.c:607 trace: exec: ''git-credential-manager'' ''get''
14:12:25.497826 run-command.c:350 trace: run_command: ''git-credential-manager'' ''get''
14:12:26.904967 run-command.c:350 trace: run_command: ''git credential-manager store''
14:12:26.941970 git.c:607 trace: exec: ''git-credential-manager'' ''store''
14:12:26.941970 run-command.c:350 trace: run_command: ''git-credential-manager'' ''store''
14:12:27.050981 run-command.c:350 trace: run_command: ''rev-list'' ''--objects'' ''--stdin'' ''--not'' ''--all'' ''--quiet''
14:12:27.060982 run-command.c:350 trace: run_command: ''rev-list'' ''--objects'' ''--stdin'' ''--not'' ''--all'' ''--quiet''
14:12:27.068983 git.c:371 trace: built-in: git ''rev-list'' ''--objects'' ''--stdin'' ''--not'' ''--all'' ''--quiet''
14:12:27.074984 run-command.c:1130 run_processes_parallel: preparing to run up to 1 tasks
14:12:27.074984 run-command.c:1162 run_processes_parallel: done
14:12:27.074984 run-command.c:350 trace: run_command: ''gc'' ''--auto''
14:12:27.082985 git.c:371 trace: built-in: git ''gc'' ''--auto''
14:12:27.085985 run-command.c:350 trace: run_command: ''merge'' ''FETCH_HEAD''
14:12:27.092986 git.c:371 trace: built-in: git ''merge'' ''FETCH_HEAD''
Already up-to-date.
Editar:
Después de ejecutar git config --global credential.helper ""
las líneas en la salida que contienen credential-manager
se reemplazan por:
17:18:44.139589 run-command.c:350 trace: run_command: ''bash'' ''-c'' ''cat >/dev/tty && read -r -s line </dev/tty && echo "$line" && echo >/dev/tty''
Password for ''https://[...]'':
A veces ocurre un retraso justo antes de que se muestre la línea de la Contraseña, con la misma duración y frecuencia (hasta donde puedo decir, de aproximadamente 20 pruebas) que antes.
Según su rastreo, parece que el paso de autenticación es lento. Puedo ver dos razones principales para esto:
- El servidor a veces responde lentamente. No podrás hacer nada en el lado del cliente.
- Algo está mal con la autenticación de tu lado. La causa más probable, creo, es que puedes usar un administrador de credenciales que causa la lentitud. Intenta desactivarlo.
TL; DR: mi git lento (GCM) se solucionó al deshabilitar el enlace del ensamblado .net en mi máquina (a través de fuslogvw).
Descubrí que se debía a un administrador de credenciales de git lento (GCM) ejecutando git y el GCM en modo de rastreo:
$ SET GIT_TRACE=1
$ SET GCM_TRACE=1
$ git fetch
Los registros mostraron que el GCM era lento. Al mirar el GCM con el monitor de proceso de sysinternals para averiguar qué estaba sucediendo, vi que estaba escribiendo fuertemente en el disco.
Ahora, resultó que el GCM es un proceso .net, y había configurado .net para registrar todos los enlaces de ensamblaje al disco para depurar algún proceso hace un par de días (a través de fuslogvw - fusion log viewer).
Desactivar el registro de enlace solucionó mi problema y la velocidad volvió a la normalidad.