¿Cómo puedo depurar problemas relacionados con git/git-shell?
¿Cómo puedo obtener información de depuración sobre git/git-shell?
Tuve un problema, que user1
podía clonar un repositorio sin problema, mientras que user2
solo podía clonar uno vacío. Lo había configurado GIT_TRACE=1
, pero no se dijo nada útil.
Finalmente, después de una larga prueba y error, resultó que se trataba de un problema de permisos en un archivo. Un mensaje de error apropiado podría provocar un cortocircuito en este problema.
Para obtener resultados aún más detallados, utilice lo siguiente:
GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull origin master
Depuración
Git tiene un conjunto bastante completo de seguimientos integrados que puedes usar para depurar tus problemas de git.
Para activarlos, puede definir las siguientes variables:
GIT_TRACE
para rastros generales,GIT_TRACE_PACK_ACCESS
para rastrear el acceso al archivo pack,GIT_TRACE_PACKET
para el seguimiento a nivel de paquetes para operaciones de red,GIT_TRACE_PERFORMANCE
para registrar los datos de rendimiento,GIT_TRACE_SETUP
para obtener información sobre cómo descubrir el repositorio y el entorno con el que interactúa,GIT_MERGE_VERBOSITY
para depurar la estrategia de fusión recursiva (valores: 0-5),GIT_CURL_VERBOSE
para registrar todos los mensajes curl (equivalente acurl -v
),GIT_TRACE_SHALLOW
para depurar, buscar/clonar repositorios poco profundos.
Los valores posibles pueden incluir:
true
,1
o2
escribir en stderr,- una ruta absoluta que comienza con
/
para rastrear la salida hasta el archivo especificado.
Para obtener más detalles, consulte: Componentes internos de Git: variables de entorno
SSH
Para problemas de SSH, pruebe los siguientes comandos:
echo 'ssh -vvv "$*"' > ssh && chmod +x ssh
GIT_SSH="$PWD/ssh" git pull origin master
o utilizar ssh
para validar sus credenciales, por ejemplo
ssh -vvvT [email protected]
o a través del puerto HTTPS:
ssh -vvvT -p 443 [email protected]
Nota: Reduzca el número de -v
para reducir el nivel de detalle.
Ejemplos
$ GIT_TRACE=1 git status
20:11:39.565701 git.c:350 trace: built-in: git 'status'
$ GIT_TRACE_PERFORMANCE=$PWD/gc.log git gc
Counting objects: 143760, done.
...
$ head gc.log
20:12:37.214410 trace.c:420 performance: 0.090286000 s: git command: 'git' 'pack-refs' '--all' '--prune'
20:12:37.378101 trace.c:420 performance: 0.156971000 s: git command: 'git' 'reflog' 'expire' '--all'
...
$ GIT_TRACE_PACKET=true git pull origin master
20:16:53.062183 pkt-line.c:80 packet: fetch< 93eb028c6b2f8b1d694d1173a4ddf32b48e371ce HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed symref=HEAD:refs/heads/master agent=git/2:2.6.5~update-ref-initial-update-1494-g76b680d
...
Si es sobre SSH, puedes usar lo siguiente:
Para un nivel de depuración más alto, escriba -vv o -vvv para los niveles de depuración 2 y 3 respectivamente:
# Debug level 1
GIT_SSH_COMMAND="ssh -v" git clone <repositoryurl>
# Debug level 2
GIT_SSH_COMMAND="ssh -vv" git clone <repositoryurl>
# Debug level 3
GIT_SSH_COMMAND="ssh -vvv" git clone <repositoryurl>
Esto es principalmente útil para manejar problemas de claves públicas y privadas con el servidor. Puede usar este comando para cualquier comando de git, no solo para 'git clone'.
prueba este:
GIT_TRACE=1 git pull origin master