Git échoue lors du transfert de commit vers github

130

J'ai cloné un dépôt git que j'ai hébergé sur github sur mon ordinateur portable. J'ai pu pousser avec succès quelques commits vers github sans problème. Cependant, j'obtiens maintenant l'erreur suivante:

Compressing objects: 100% (792/792), done.
error: RPC failed; result=22, HTTP code = 411
Writing objects: 100% (1148/1148), 18.79 MiB | 13.81 MiB/s, done.
Total 1148 (delta 356), reused 944 (delta 214)

De là, il se bloque et je dois enfin CTRL+ Crevenir au terminal.

Stephen Melvin
la source
Pourquoi y a-t-il une erreur HTTP? Ne poussez-vous pas vers github via SSH?
Cascabel
Pour clarifier: l'url dans la originsection de .git/configne dit pas http, n'est-ce pas?
Cascabel
@Jefromi J'ai cloné mon dépôt privé en utilisant le lien http en lecture / écriture.
Stephen Melvin
Non, il dit https. C'est bizarre parce que j'ai pu faire deux poussées avant l'échec.
Stephen Melvin

Réponses:

292

J'ai eu le même problème et je pense que cela a à voir avec la taille du dépôt (édité ou la taille d'un fichier particulier) que vous essayez de pousser.

En gros, j'ai pu créer de nouveaux dépôts et les pousser vers github. Mais un existant ne fonctionnerait pas.

Le code d'erreur HTTP semble me confirmer qu'il s'agit d'une erreur «Longueur requise». Alors peut-être est-il trop grand pour calculer ou dépassé le max. Qui sait.

ÉDITER

J'ai trouvé que le problème pouvait être des fichiers volumineux. J'avais une mise à jour qui ne pousserait pas même si j'avais réussi à pousser jusqu'à ce point. Il n'y avait qu'un seul fichier dans le commit, mais il s'agissait de 1,6M

J'ai donc ajouté le changement de configuration suivant

git config http.postBuffer 524288000

Pour permettre jusqu'à la taille du fichier 500M, puis mon push a fonctionné. C'était peut-être le problème au départ de pousser un gros dépôt sur le protocole http.

FIN DE LA MODIFICATION

la façon dont je pouvais le faire fonctionner (EDIT avant de modifier postBuffer) était de tarer mon dépôt, de le copier sur une machine capable de faire git sur ssh et de le pousser vers github. Ensuite, lorsque vous essayez de faire un push / pull à partir du serveur d'origine, cela devrait fonctionner sur https. (puisqu'il s'agit d'une quantité de données beaucoup plus petite qu'une poussée d'origine).

J'espère que cela t'aides.

Volonté
la source
Cela a fonctionné pour moi aussi, même si j'ai eu une erreur HTTP 501 plutôt que le 411. Merci!
Emaad Ahmed Manzoor
Merci! cela a fonctionné, et même accélérer le téléchargement. J'essayais de pousser un site Web vers les nouveaux sites Web Windows Azure et cela échouait sans cesse.
Jake
23
Y a-t-il un inconvénient à définir simplement cette valeur très élevée?
snogglethorpe
@snogglethorpe Potentiellement: "Transfer-Encoding: chunked est utilisé pour éviter de créer localement un fichier pack massif". Si vous définissez la valeur sur quelque chose d'énorme, vous pouvez finir par générer des fichiers de pack massifs lorsque vous essayez de pousser. Tous les systèmes de fichiers ne gèrent pas bien les fichiers volumineux et peuvent ne pas être élagués efficacement. Vous pouvez voir ces fichiers dans .git / objects / pack.
chanvre
Changer le http.postBufferest plus inutile que nuisible, mais il y a un effet secondaire négatif: l'augmenter au-dessus de la valeur par défaut peut augmenter la latence pour des push plus importants (puisque le client mettra en mémoire tampon la requête HTTP en morceaux plus grands).
Swatantra Kumar
8

Si cette commande n'aide pas

git config http.postBuffer 524288000

Essayez de changer la méthode ssh en https

git remote -v
git remote rm origin 
git remote add origin https://github.com/username/project.git
Nikita Pushkar
la source
4

Ressemble à un problème de serveur (c'est-à-dire un problème "GitHub").
Si vous regardez ce fil , cela peut arriver lorsque le git-http-backendobtient un tas corrompu (et comme ils viennent de mettre en place un support http intelligent ...)
Mais quelle que soit la cause réelle, cela peut aussi être lié à une perturbation sporadique récente dans l'un des serveurs de fichiers GitHub .

Voyez-vous toujours ce message d'erreur? Parce que si vous faites:

  • vérifiez votre version locale de Git (et mettez à niveau vers la dernière)
  • signaler cela comme un bogue GitHub .

Remarque: le support Smart HTTP est un gros problème pour ceux d'entre nous qui sont derrière un proxy de pare-feu d'entreprise authentifié!

À partir de maintenant, si vous clonez un référentiel sur l' http://url et que vous utilisez un client Git version 1.6.6 ou supérieure, Git utilisera automatiquement le mécanisme de transport plus récent et meilleur.
Encore plus étonnant, cependant, c'est que vous pouvez maintenant pousser ce protocole et cloner également des référentiels privés. Si vous accédez à un référentiel privé, ou si vous êtes un collaborateur et souhaitez un accès push, vous pouvez mettre votre nom d'utilisateur dans l'URL et Git vous demandera le mot de passe lorsque vous tenterez d'y accéder.

Les clients plus âgés reviendront également à la méthode la plus ancienne et la moins efficace, donc rien ne devrait casser - seuls les nouveaux clients devraient mieux fonctionner.

Encore une fois, assurez-vous de mettre à niveau votre client Git en premier.

VonC
la source
J'ai eu des problèmes similaires derrière un routeur ADSL sans fil (French Orange Livebox): impossible de publier ma clé SSH sur github.com , push bloqué sur https ... jusqu'à ce que j'utilise un autre accès Internet.
Yves Martin
Le support HTTP intelligent a réussi à me faire passer par notre proxy de pare-feu lorsque j'obtenais "erreur: RPC a échoué; résultat = 22, code HTTP = 0" lorsque j'ai essayé de pousser.
Boggin
@Boggin Oui, je confirme que smart http est généralement le choix préféré quand on est derrière un proxy. Les ports standard http / https sont (presque) toujours ouverts.
VonC le
0

Pousser depuis l'interface graphique Git au lieu de Bash fonctionne pour moi.

Vitaly Leskiv
la source
0

J'ai essayé de pousser vers mon propre serveur hébergé bonobo-git, et je ne me suis pas rendu compte que http.postbuffer signifiait le répertoire du projet ...

donc juste pour les autres confus:

Pourquoi? Dans mon cas, j'avais de gros fichiers zip avec des actifs et certains PSD également poussés - trop gros pour le tampon, je suppose.

Comment faire cela http.postbuffer: exécutez cette commande dans le répertoire src de votre projet, à côté du dossier .git, pas sur le serveur.

Attention, de gros fichiers temporaires (chunk) seront créés avec cette taille de tampon.

Remarque: vérifiez simplement vos fichiers les plus volumineux, puis définissez le tampon.

BananeAcide
la source
-2

Le problème à pousser est principalement dû à la taille des fichiers qui doivent être poussés. J'essayais de pousser certaines bibliothèques de taille juste 2 mb, alors aussi la poussée donnait une erreur de RPC avec le résultat 7. La ligne est de 4 Mbps et fonctionne bien. Quelques essais ultérieurs m'ont permis de réussir. Si une telle erreur survient, attendez quelques minutes et continuez à essayer.

J'ai également découvert qu'il y avait des échecs RPC si le github est en panne ou obtient un réseau instable à leurs côtés.

Donc, continuer à essayer après quelques intervalles est la seule option!

Apurv Nerlekar
la source
-2

dans ces cas, vous pouvez essayer ssh si https est bloqué.

Vous pouvez également essayer d'augmenter la taille du tampon à un chiffre astronomique afin de ne plus avoir à vous soucier de la taille du tampon git config http.postBuffer 100000000

RahulMohan Kolakandy
la source