erro: RPC falhou; transferência de curl fechada com dados de leitura pendentes restantes

129

Eu tento clonar um repositório do GitLab (GitLab 6.6.2 4ef8369) e erro:

insira a descrição da imagem aqui

remote: Counting objects: 66352, done.
remote: Compressing objects: 100% (10417/10417), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

Como evitar esse erro?

Do Nhu Vy
fonte

Respostas:

222

Isso acontece com mais frequência do que não, estou com uma conexão lenta à Internet e tenho que clonar um repositório git decentemente enorme. O problema mais comum é que a conexão é fechada e o clone inteiro é cancelado.

Cloning into 'large-repository'...
remote: Counting objects: 20248, done.
remote: Compressing objects: 100% (10204/10204), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining 
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

Depois de muitas tentativas e erros e muitas "finalizações remotas desligadas inesperadamente", tenho uma maneira que funciona para mim. A idéia é fazer um clone superficial primeiro e depois atualizar o repositório com seu histórico.

$ git clone http://github.com/large-repository --depth 1
$ cd large-repository
$ git fetch --unshallow
Khader MA
fonte
10
Esta é a única resposta que descreve uma solução alternativa para o problema sem mudar para SSH. Isso funcionou para mim, obrigado!
Garie
14
A chave aqui é --depth 1e --unshallow. Isso também funciona para buscar um repositório existente em conexão lenta: git fetch --depth 1then git fetch --unshallow.
Andrew T.
1
Para maior clareza @AndrewT., O git fetch --unshallowcomando lida com a perda de conexão de uma maneira mais perdoadora do que a git clone? E é isso que faz a diferença aqui?
Lowell
2
Agora, o git fetch --unshallowcomando deu RPC failed;erro
ms_27
1
Não funcionou para mim. Falha no git fetch --unshallow. Acho que meu repo é muito grande, mesmo para essa abordagem. Apenas SSH funcionou.
Jonathan Cabrera
59

Depois de alguns dias, hoje eu resolvi esse problema. Gere a chave ssh, siga este artigo:

https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/

Declare

  1. Provedor Git (GitLab, o que eu estou usando, GitHub).
  2. Adicione isso à identidade local.

Em seguida, clone por comando:

git clone [email protected]:my_group/my_repository.git

E nenhum erro acontece.

O problema acima

erro: RPC falhou; transferência curl 18 fechada com dados de leitura excelentes restantes

porque tem erro ao clonar pelo protocolo HTTP ( curlcomando).

E você deve incrementar o tamanho do buffer:

git config --global http.postBuffer 524288000
Do Nhu Vy
fonte
7
Mudar de HTTP para SSH funciona para mim. O Config http.postBuffernão funcionou.
Thangdc94
se ainda houver erro, edite seu arquivo de configuração ssh vi /users/username/.ssh/config e adicione serverAliveInterval 120 e saia do vi usando wq (para salvar e sair). Na verdade, isso impedirá o servidor de erros de tempo limite e interrupção de conexão.
quer
isso é legal, mas alguém sabe por que isso acontece com 100% de clonagem?
workplaylifecycle
Mudar http.postBufferfuncionou para mim - obrigado!
Negar Zamiri 25/03
Obrigado, funciona para mim, esta solução deveria votar mais :)
Sadmi 20/04
17

Quando tentei clonar no controle remoto, tive o mesmo problema repetidamente:

remote: Counting objects: 182, done.
remote: Compressing objects: 100% (149/149), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

Finalmente, isso funcionou para mim:

git clone https://[email protected]/repositoryName.git --depth 1
Purushottam Padhya
fonte
3
o que - profundidade 1 faz
Wahdat Kashmiri
Funcionou bem para mim.
vijay junupalli
Se o repositório de origem estiver completo, converta um repositório raso em um completo, removendo todas as limitações impostas por repositórios rasos. Se o repositório de origem for raso, busque o máximo possível para que o repositório atual tenha o mesmo histórico que o repositório de origem.
RahmanRezaee 28/07
5

Solução simples: em vez de clonar via https, clone-o via ssh.

Por exemplo:

git clone https://github.com/vaibhavjain2/xxx.git - Avoid
git clone [email protected]:vaibhavjain2/xxx.git - Correct
Vaibhav Jain
fonte
Sim. Eu sou usuário do Windows.
Vaibhav Jain
5

Problemas de conexão de rede.
Talvez devido ao tempo limite da conexão persistente.
A melhor maneira é mudar para outra rede.

Yang
fonte
5

Essas etapas funcionaram para mim: usar em git://vez dehttps://

Jinwawa
fonte
3
Bem-vindo ao Stack Overflow. Tente fornecer uma resposta um pouco mais detalhada para que qualquer pessoa que queira experimentar sua solução possa fazê-lo facilmente.
precisa saber é o seguinte
Na verdade, esta resposta é mais específico do que próximos queridos neste tópico ..
xxxvodnikxxx
5

você precisa desativar a compactação:

git config --global core.compression 0

então você precisa usar clone superficial

git clone --depth=1 <url>

o passo mais importante é entrar no seu projeto clonado

cd <shallow cloned project dir>

agora abra o clone, passo a passo

git fetch --depth=N, with increasing N

por exemplo.

git fetch --depth=4

então,

git fetch --depth=100

então,

git fetch --depth=500

você pode escolher quantas etapas deseja substituindo este N,

e finalmente faça o download de todas as revisões restantes usando,

git fetch --unshallow 

voto positivo se isso ajuda você :)

NikhilP
fonte
4

Como mencionado acima, primeiro execute o comando git a partir do bash, adicionando as diretivas de log aprimoradas no início: GIT_TRACE=1 GIT_CURL_VERBOSE=1 git ...

Por exemplo, GIT_CURL_VERBOSE=1 GIT_TRACE=1 git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin isso mostrará informações detalhadas sobre erros.

Sergey Gindin
fonte
2

Comigo esse problema ocorreu porque a configuração do proxy. Eu adicionei o servidor ip git na exceção de proxy. O servidor git era local, mas a variável de ambiente no_proxy não foi configurada corretamente.

Eu usei este comando para identificar o problema:

#Linux:
export GIT_TRACE_PACKET=1
export GIT_TRACE=1
export GIT_CURL_VERBOSE=1

#Windows
set GIT_TRACE_PACKET=1
set GIT_TRACE=1
set GIT_CURL_VERBOSE=1

Em troca, havia a "Proxy-Authorization", pois o servidor git estava no local e não deveria passar pelo proxy. Mas o problema real era o tamanho dos arquivos definidos pelas regras de proxy

Francisco Eduardo
fonte
2

Para mim, o problema era que a conexão fecha antes que todo o clone seja concluído. Eu usei ethernet em vez de conexão wifi. Então resolve para mim

Yuresh Karunanayake
fonte
1

Este erro parece ocorrer mais comumente com uma conexão de Internet lenta ou com problemas. Eu conectei com boa velocidade de internet, então funcionou perfeitamente.

Jitendra Rathor
fonte
0

Esse problema chega quando você está com um problema de proxy ou com uma rede lenta. Você pode usar a solução de profundidade ou

git fetch --all  or git clone 

    

Se isso der um erro de curvatura 56 Recv , faça o download do arquivo via zip ou especifique o nome da ramificação em vez de --all

git fetch origin BranchName 
Gajender Singh
fonte
-1

Alterando o protocolo git clone para tentar.

por exemplo, esse erro ocorreu quando "git clone https: // xxxxxxxxxxxxxxx "

você pode tentar com "git clone git: // xxxxxxxxxxxxxx", talvez ok então.

Bingnan
fonte
-6

Estas etapas estão funcionando para mim:

cd [dir]
git init
git clone [your Repository Url]

Espero que funcione para você também.

wen jiang
fonte