Pergunta

Eu tenho um novo desktop rodando Ubuntu.Sincronizei novamente vários repositórios git do meu computador anterior para o novo.Posso empurrar e puxar tudo isso sem problemas.Entretanto, se eu fizer um git clone em um novo repositório (usamos gitolite e gitflow), qualquer git push trava.Mesmo que eu consiga enviar com êxito um projeto rsynced, fazer um git clone do projeto do gitolite é bem-sucedido, mas resulta em um projeto que não posso impulsionar.O .git/config os arquivos são idênticos.

Meu computador:

$ uname -a
Linux ovid-desktop 3.0.0-16-generic #29-Ubuntu SMP Tue Feb 14 12:48:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

Saída push do Git (ou leia a saída do strace):

GIT_TRACE=1 git push -vv origin users/ovid
trace: built-in: git 'push' '-vv' 'origin' 'users/ovid'
Pushing to gitolite:libs/perl/ThirdParty-Sync
trace: run_command: 'ssh' 'gitolite' 'git-receive-pack '\''libs/perl/ThirdParty-Sync'\'''
trace: run_command: 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress'
trace: exec: 'git' 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress'
trace: built-in: git 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress'
Counting objects: 53, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (21/21), done.
Writing objects: 100% (28/28), 2.59 KiB, done.
Total 28 (delta 13), reused 0 (delta 0)

E fica pendurado para sempre depois do Total 28 (delta... linha.

Um push bem-sucedido do mesmo projeto, mas do diretório rsynced, tem a seguinte aparência:

To gitolite:libs/perl/ThirdParty-Sync                                                                                                                 
   8c056a5..0321b35  users/ovid -> users/ovid

O único sintoma (arenque vermelho?) que posso imaginar e que pode estar relacionado é este:

$ ssh gitolite
PTY allocation request failed on channel 0

Eu tenho que adicionar um -T para fazer isso funcionar.

Novamente, posso enviar push com êxito se estiver no rsynced ThirdPart-Sync diretório.Somente se eu tentar clonar esse projeto novamente do servidor gitolite é que ele falhará.

Atualizar:Acontece que não fica pendurado para sempre.Depois de um bom tempo, recebo o seguinte após o Total 28 linha.

Write failed: Broken pipe
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly

Atualizar Executar strace não me diz o que está acontecendo.Em um repositório não consigo enviar:

wait4(4122, Counting objects: 53, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (18/18), done.
Writing objects: 100% (28/28), 11.62 KiB, done.
    Total 28 (delta 3), reused 28 (delta 3)
[{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 4122
--- SIGCHLD (Child exited) @ 0 (0) ---
read(3, 

Executando um strace em um repositório I pode push me dá isso aproximadamente do mesmo lugar:

write(9, "^0321b3501969dead78a83a0d3234724"..., 42) = 42
write(9, "b9cbbc6cc37100baf706746205e7a4c4"..., 41) = 41
close(9)                                = 0
wait4(4632, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 4632
--- SIGCHLD (Child exited) @ 0 (0) ---
read(6, "000e", 4)                      = 4
read(6, "unpack ok\n", 10)              = 10
read(6, "001d", 4)                      = 4
read(6, "ok refs/heads/users/ovid\n", 25) = 25
read(6, "0000", 4)                      = 4
futex(0x7f8a49c619d0, FUTEX_WAIT, 4631, NULL) = 0
Foi útil?

Solução

O OP Ovídio afirmou no comentário

VoC:Depois de muito inferno, eu mudou de uma chave DSA SSH para uma rsa chave SSH e tudo começou a funcionar.

A documentação do Gitolite "como gitolite usa ssh" apenas menciona chaves rsa.
Portanto, parece seguro continuar usando esse tipo específico de chave.

O utilitário check (empacotado com gitoite) sshkeys-lint analisar apenas para rsa (ou dss)

Outras dicas

Você pode empurrar qualquer repositórios para Gitolite?Ou apenas aqueles que você não sincronizou novamente?

E quanto ao seu ~/.gitconfig?

Se eu estivesse na sua situação, tentaria duas coisas:

  • strace para descobrir o que o git-push/ssh está esperando.

  • Use o SSH ControlMaster/ControlPath em ~/.ssh/config para criar uma conexão SSH compartilhada e tente fazer push após executar ssh -T gitolite.

Tente seguir os passos:

   $git pull
   $git push origin branch

tente comparar a configuração nos novos repositórios.Os padrões mudam entre as versões do git.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top