errore: RPC non riuscito; trasferimento arricciatura chiuso con dati di lettura in sospeso rimanenti


130

Sto affrontando questo errore quando provo a clonare un repository da GitLab (GitLab 6.6.2 4ef8369):

inserisci qui la descrizione dell'immagine

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

Il clone viene quindi interrotto. Come posso evitarlo?

Risposte:


223

Succede il più delle volte, sono su una connessione Internet lenta e devo clonare un repository git abbastanza grande. Il problema più comune è che la connessione si chiude e l'intero clone viene annullato.

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

Dopo un sacco di tentativi ed errori e un sacco di "terminali remoti riattaccati inaspettatamente" ho un modo che funziona per me. L'idea è di fare prima un clone superficiale e poi aggiornare il repository con la sua cronologia.

$ git clone http://github.com/large-repository --depth 1
$ cd large-repository
$ git fetch --unshallow

10
Questa è l'unica risposta che descrive una soluzione alternativa al problema senza passare a SSH. Questo ha funzionato per me, grazie!
garie

14
La chiave qui è --depth 1e --unshallow. Funziona anche per il recupero di un repository esistente su una connessione lenta: git fetch --depth 1quindi git fetch --unshallow.
Andrew T.

1
Per chiarezza @AndrewT., Il git fetch --unshallowcomando si occupa della perdita di connessione in un modo più indulgente rispetto al git clone? Ed è questo che fa la differenza qui?
Lowell

2
Ora, il git fetch --unshallowcomando restituisce un RPC failed;errore
ms_27

1
Non ha funzionato per me. Non riuscito su git fetch --unshallow. Immagino che il mio repo sia troppo grande anche per questo approccio. Solo SSH ha funzionato.
Jonathan Cabrera

60

Dopo pochi giorni, oggi ho appena risolto questo problema. Genera la chiave ssh, segui questo articolo:

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

Dichiaralo a

  1. Provider Git (GitLab quello che sto usando, GitHub).
  2. Aggiungi questo all'identità locale.

Quindi clona tramite comando:

git clone username@mydomain.com:my_group/my_repository.git

E non si verificano errori.

Il problema di cui sopra

errore: RPC non riuscito; curl 18 trasferimento chiuso con dati di lettura in sospeso rimanenti

perché hanno un errore durante la clonazione dal protocollo HTTP ( curlcomando).

E dovresti aumentare la dimensione del buffer:

git config --global http.postBuffer 524288000

7
Il passaggio da HTTP a SSH funziona per me. La configurazione http.postBuffernon ha funzionato.
thangdc94

se l'errore è ancora presente, è necessario modificare il file di configurazione ssh vi /users/username/.ssh/config e aggiungere serverAliveInterval 120 ed uscire da vi utilizzando wq (per salvare ed uscire). Ciò impedirà effettivamente il timeout del server e gli errori di interruzione della connessione.
Tanvir Singh

è carino, ma qualcuno sa perché accade per il 100% clonato?
workplaylifecycle

Il cambiamento ha http.postBufferfunzionato per me - grazie!
Negar Zamiri il

Grazie, per me funziona, questa soluzione dovrebbe essere votata di più :)
Sadmi

17

Quando ho provato a clonare dal telecomando, ho riscontrato ripetutamente lo stesso problema:

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

Alla fine questo ha funzionato per me:

git clone https://username@bitbucket.org/repositoryName.git --depth 1

3
cosa fa
Wahdat Kashmiri

Ha funzionato bene per me.
vijay junupalli

Se il repository di origine è completo, converti un repository superficiale in uno completo, rimuovendo tutte le limitazioni imposte dai repository superficiali. Se il repository di origine è superficiale, prendi il più possibile in modo che il repository corrente abbia la stessa cronologia del repository di origine.
Rahman Rezaee

6

è necessario disattivare la compressione:

git config --global core.compression 0

quindi è necessario utilizzare il clone superficiale

git clone --depth=1 <url>

quindi il passaggio più importante è inserire il cd nel progetto clonato

cd <shallow cloned project dir>

ora deopen il clone, passo dopo passo

git fetch --depth=N, with increasing N

per esempio.

git fetch --depth=4

poi,

git fetch --depth=100

poi,

git fetch --depth=500

puoi scegliere quanti passaggi vuoi sostituendo questa N,

e infine scarica tutte le revisioni rimanenti utilizzando,

git fetch --unshallow 

vota positivamente se ti aiuta :)


5

Soluzione semplice: piuttosto che clonare tramite https, clonatela tramite ssh.

Per esempio:

git clone https://github.com/vaibhavjain2/xxx.git - Avoid
git clone git@github.com:vaibhavjain2/xxx.git - Correct

Sì. Sono un utente di Windows.
Vaibhav Jain

5

Problemi di connessione di rete.
Forse a causa del persistente timeout della connessione.
Il modo migliore è passare a un'altra rete.


5

Questi passaggi hanno funzionato per me: usare git://invece dihttps://


3
Benvenuto in Stack Overflow. Prova a fornire una risposta un po 'più dettagliata in modo che chiunque desideri provare la tua soluzione possa farlo facilmente.
McMutton

in realtà, questa risposta è più specifica di quelle successive in questo thread ..
xxxvodnikxxx

4

Come accennato in precedenza, prima di tutto esegui il tuo comando git da bash aggiungendo le direttive di log migliorate all'inizio: GIT_TRACE=1 GIT_CURL_VERBOSE=1 git ...

ad esempio, GIT_CURL_VERBOSE=1 GIT_TRACE=1 git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin questo ti mostrerà informazioni dettagliate sull'errore.


2

Con me questo problema si è verificato a causa della configurazione del proxy. Ho aggiunto il server ip git nell'eccezione proxy. Il server git era locale, ma la variabile d'ambiente no_proxy non era impostata correttamente.

Ho usato questo comando per identificare il 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

In cambio c'era la "Proxy-Authorization" poiché il server git era spot non doveva passare attraverso il proxy. Ma il vero problema era la dimensione dei file definita dalle regole del proxy


2

Per me, il problema era che la connessione si chiudeva prima del completamento dell'intero clone. Ho usato ethernet invece della connessione wifi. Quindi risolve per me



1

Questo errore sembra verificarsi più comunemente con una connessione Internet lenta o problematica. Mi sono connesso con una buona velocità di Internet, quindi ha funzionato perfettamente.


1

Questo problema arriva quando sei un problema con il proxy o una rete lenta. Puoi andare con la soluzione di profondità o

git fetch --all  or git clone 

    

Se questo dà un errore di curl 56 Recv failure, scarica il file tramite zip o specifica il nome del ramo invece di --all

git fetch origin BranchName 

-1

Modifica del protocollo git clone da provare.

ad esempio, questo errore si è verificato quando "git clone https: // xxxxxxxxxxxxxxx "

puoi provare con "git clone git: // xxxxxxxxxxxxxx", forse ok allora.


-6

Questi passaggi stanno funzionando per me:

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

Spero che funzioni anche per te.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.