erreur: RPC a échoué; transfert curl fermé avec des données de lecture exceptionnelles restantes

130

Je suis confronté à cette erreur lorsque j'essaye de cloner un référentiel à partir de GitLab (GitLab 6.6.2 4ef8369):

entrez la description de l'image ici

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

Le clone est alors abandonné. Comment puis-je éviter ça?

Do Nhu Vy
la source

Réponses:

223

Cela arrive le plus souvent, je suis sur une connexion Internet lente et je dois cloner un dépôt git décemment énorme. Le problème le plus courant est que la connexion se ferme et que tout le clone est annulé.

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

Après beaucoup d'essais et d'erreurs et beaucoup de "l'extrémité distante a raccroché de façon inattendue", j'ai un moyen qui fonctionne pour moi. L'idée est de faire d'abord un clone superficiel, puis de mettre à jour le référentiel avec son historique.

$ git clone http://github.com/large-repository --depth 1
$ cd large-repository
$ git fetch --unshallow
Khader MA
la source
10
C'est la seule réponse qui décrit une solution de contournement pour le problème sans passer à SSH. Cela a fonctionné pour moi, merci!
garie
14
La clé ici est --depth 1et --unshallow. Cela fonctionne également pour récupérer un dépôt existant sur une connexion lente: git fetch --depth 1alors git fetch --unshallow.
Andrew T.
1
Pour plus de clarté @AndrewT., La git fetch --unshallowcommande traite la perte de connexion d'une manière plus indulgente que le git clone? Et c'est ce qui fait la différence ici?
Lowell
2
Maintenant, la git fetch --unshallowcommande donne une RPC failed;erreur
ms_27
1
Cela n'a pas fonctionné pour moi. Échec sur le git fetch --unshallow. Je suppose que mon repo est trop gros, même pour cette approche. Seul SSH fonctionnait.
Jonathan Cabrera le
60

Après quelques jours, je viens de résoudre ce problème aujourd'hui. Générez la clé ssh, suivez cet article:

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

Déclarez-le à

  1. Fournisseur Git (GitLab que j'utilise, GitHub).
  2. Ajoutez ceci à l'identité locale.

Puis clonez par commande:

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

Et aucune erreur ne se produit.

Le problème ci-dessus

erreur: RPC a échoué; transfert curl 18 fermé avec des données de lecture exceptionnelles restantes

car avoir une erreur lors du clonage par le protocole HTTP ( curlcommande).

Et, vous devez incrémenter la taille du tampon:

git config --global http.postBuffer 524288000
Do Nhu Vy
la source
7
Passer de HTTP à SSH fonctionne pour moi. La configuration http.postBuffern'a pas fonctionné.
thangdc94
si l'erreur persiste, vous devez éditer votre fichier de configuration ssh vi /users/username/.ssh/config et ajouter serverAliveInterval 120 et quitter vi en utilisant wq (pour enregistrer et quitter). Cela évitera en fait au serveur les erreurs de dépassement de délai et de rupture de connexion.
Tanvir Singh
c'est bien, mais n'importe qui sait pourquoi cela arrive pour 100% cloné?
workplaylifecycle
Changer a http.postBufferfonctionné pour moi - merci!
Negar Zamiri
Merci, cela fonctionne pour moi, cette solution devrait voter plus :)
Sadmi
17

Lorsque j'ai essayé de cloner à partir de la télécommande, j'ai rencontré le même problème à plusieurs reprises:

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

Finalement, cela a fonctionné pour moi:

git clone https://[email protected]/repositoryName.git --depth 1
Purushottam Padhya
la source
3
que fait --depth 1
Wahdat Kashmiri
A bien fonctionné pour moi.
vijay junupalli
Si le référentiel source est complet, convertissez un référentiel peu profond en un référentiel complet, en supprimant toutes les limitations imposées par les référentiels peu profonds. Si le référentiel source est peu profond, récupérez autant que possible afin que le référentiel actuel ait le même historique que le référentiel source.
RahmanRezaee
6

vous devez désactiver la compression:

git config --global core.compression 0

alors vous devez utiliser un clone peu profond

git clone --depth=1 <url>

alors l'étape la plus importante est de cd dans votre projet cloné

cd <shallow cloned project dir>

maintenant désouvrir le clone, étape par étape

git fetch --depth=N, with increasing N

par exemple.

git fetch --depth=4

puis,

git fetch --depth=100

puis,

git fetch --depth=500

vous pouvez choisir le nombre d'étapes que vous souhaitez en remplaçant ce N,

et enfin télécharger toutes les révisions restantes en utilisant,

git fetch --unshallow 

voter pour si cela vous aide :)

NikhilP
la source
5

Solution simple: au lieu de cloner via https, clonez-le via ssh.

Par exemple:

git clone https://github.com/vaibhavjain2/xxx.git - Avoid
git clone [email protected]:vaibhavjain2/xxx.git - Correct
Vaibhav Jain
la source
Oui. Je suis utilisateur de Windows.
Vaibhav Jain
5

Problèmes de connexion réseau.
Peut-être en raison du délai d'expiration de la connexion persistante.
Le meilleur moyen est de passer à un autre réseau.

Yang
la source
5

Ces étapes ont fonctionné pour moi: utiliser git://au lieu dehttps://

Jinwawa
la source
3
Bienvenue dans Stack Overflow. Veuillez essayer de fournir une réponse un peu plus détaillée afin que toute personne souhaitant essayer votre solution puisse le faire facilement.
McMutton
en fait, cette réponse est plus précise que les suivantes dans ce fil ..
xxxvodnikxxx
4

Comme mentionné ci-dessus, lancez tout d'abord votre commande git à partir de bash en ajoutant les directives de journal améliorées au début: GIT_TRACE=1 GIT_CURL_VERBOSE=1 git ...

Par exemple, GIT_CURL_VERBOSE=1 GIT_TRACE=1 git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin cela vous montrera des informations d'erreur détaillées.

Sergey Gindin
la source
2

Avec moi, ce problème s'est produit parce que la configuration du proxy. J'ai ajouté le serveur ip git dans l'exception proxy. Le serveur git était local, mais la variable d'environnement no_proxy n'était pas définie correctement.

J'ai utilisé cette commande pour identifier le problème:

#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

En retour, il y avait le "Proxy-Authorization" car le serveur git était spot ne devrait pas passer par le proxy. Mais le vrai problème était la taille des fichiers définis par les règles de proxy

Francisco Eduardo
la source
2

Pour moi, le problème était que la connexion se ferme avant la fin du clone. J'ai utilisé Ethernet au lieu de la connexion wifi. Alors ça résout pour moi

Yuresh Karunanayake
la source
1

Cette erreur semble se produire plus fréquemment avec une connexion Internet lente ou perturbée. Je me suis connecté avec une bonne vitesse Internet, cela fonctionne parfaitement.

Jitendra Rathor
la source
1

Ce problème survient lorsque vous êtes un problème de proxy ou un réseau lent. Vous pouvez choisir la solution de profondeur ou

git fetch --all  or git clone 

    

Si cela donne une erreur d' échec de curl 56 Recv, téléchargez le fichier via zip ou spécifiez le nom de la branche au lieu de --all

git fetch origin BranchName 
Gajender Singh
la source
-1

Changer le protocole de clone git pour essayer.

par exemple, cette erreur s'est produite lorsque "git clone https: // xxxxxxxxxxxxxxx "

vous pouvez essayer avec "git clone git: // xxxxxxxxxxxxxx", peut-être ok alors.

Bingnan
la source
-6

Ces étapes fonctionnent pour moi:

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

J'espère que cela fonctionne pour vous aussi.

wen jiang
la source