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.