Como posso depurar problemas relacionados ao git / git-shell?

Como posso ter algumas informações de debugging relacionadas ao git / git-shell?

Eu tive um problema, que user1 poderia clonar um repository sem problema, enquanto user2 poderia clonar apenas um vazio. Eu tinha definido GIT_TRACE=1 , mas nada de útil foi dito.

Finalmente, depois de uma longa tentativa e erro, descobriu-se que era um problema de permissão em um arquivo. Uma mensagem de erro apropriada pode causar um curto-circuito no problema.

Para saída ainda mais detalhada, use:

GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull origin master

tente este:

 GIT_TRACE=1 git pull origin master 

Depuração

O Git tem um conjunto bastante completo de rastreios embutidos que você pode usar para depurar seus problemas com o git.

Para ativá-los, você pode definir as seguintes variables:

  • GIT_TRACE para traços gerais,
  • GIT_TRACE_PACK_ACCESS para rastrear o access ao GIT_TRACE_PACK_ACCESS de pacote,
  • GIT_TRACE_PACKET para rastreio em nível de pacote para operações de rede,
  • GIT_TRACE_PERFORMANCE para registrar os dados de desempenho,
  • GIT_TRACE_SETUP para obter informações sobre como descobrir o repository e o ambiente com o qual ele está interagindo,
  • GIT_MERGE_VERBOSITY para depurar a estratégia de mesclagem recursiva (valores: 0-5),
  • GIT_CURL_VERBOSE para registrar todas as mensagens curl (equivalente a curl -v ),
  • GIT_TRACE_SHALLOW para debugging de busca / clonagem de repositorys rasos.

Valores possíveis podem include:

  • true , 1 ou 2 para escrever para stderr,
  • um caminho absoluto começando com / para rastrear a saída para o arquivo especificado.

Para mais detalhes, veja: Git Internals – Environment Variables


SSH

Para problemas de SSH, tente os seguintes comandos:

 echo 'ssh -vvv $*' > ssh && chmod +x ssh GIT_SSH="$PWD/ssh" git pull origin master 

ou use o ssh para validar suas credenciais, por exemplo

 ssh -vvvT git@github.com 

ou pela porta HTTPS:

 ssh -vvvT -p 443 git@ssh.github.com 

Nota: Reduza o número de -v para reduzir o nível de detalhamento.


Exemplos

 $ 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 ... 

Se for sobre SSH, você pode usar o seguinte:

Para um nível de debugging mais alto para o tipo -vv ou -vvv para os níveis de debugging 2 e 3, respectivamente:

 # Debug level 1 GIT_SSH_COMMAND="ssh -v" git clone  # Debug level 2 GIT_SSH_COMMAND="ssh -vv" git clone  # Debug level 3 GIT_SSH_COMMAND="ssh -vvv" git clone  

Isso é útil principalmente para lidar com problemas de chave pública e privada com o servidor. Você pode usar este comando para qualquer comando git, não apenas ‘git clone’.

O Git 2.9.x / 2.10 (T3 2016) adiciona outra opção de debugging: GIT_TRACE_CURL .

Veja commit 73e57aa , commit 74c682d (23 de maio de 2016) por Elia Pinto ( devzero2000 ) .
Ajudado por: Torsten Bögershausen ( tboegi ) , Ramsay Jones, Junio ​​C Hamano ( gitster ) , Eric Sunshine ( sunshineco ) e Jeff King ( peff ) .
(Mesclado por Junio ​​C Hamano – gitster – em commit 2f84df2 , 06 de julho de 2016)

http.c : implementa a variável de ambiente GIT_TRACE_CURL

Implemente a variável de ambiente GIT_TRACE_CURL para permitir um maior grau de detalhe de GIT_CURL_VERBOSE , em particular o header de transporte completo e toda a carga de dados trocada.
Pode ser útil se uma situação específica exigir uma análise de debugging mais completa.

A documentação indicará:

 GIT_TRACE_CURL 

Permite um rastreamento de rastreamento completo de todos os dados de input e saída, incluindo informações descritivas, do protocolo de transporte git.
Isso é semelhante a fazer curl --trace-ascii na linha de comando.

Esta opção sobrescreve a configuração da variável de ambiente GIT_CURL_VERBOSE .


Você pode ver essa nova opção usada nesta resposta , mas também nos testes do Git 2.11 (Q4 2016):

Veja commit 14e2411 , commit 81590bf , commit 4527aa1 , commit 4eee6c6 (07 set 2016) por Elia Pinto ( devzero2000 ) .
(Mesclado por Junio ​​C Hamano – gitster – em commit 930b67e , 12 set 2016)

Use a nova variável de ambiente GIT_TRACE_CURL em vez do GIT_CURL_VERBOSE obsoleto .

 GIT_TRACE_CURL=true git clone --quiet $HTTPD_URL/smart/repo.git 

Você já tentou adicionar o operador detalhado ( -v ) ao clonar?

git clone -v git://git.kernel.org/pub/scm/.../linux-2.6 my2.6