Git schlägt fehl, wenn Commit an Github gesendet wird


130

Ich habe ein Git-Repo, das ich auf Github gehostet habe, auf meinen Laptop geklont. Ich konnte ein paar Commits ohne Probleme erfolgreich auf Github übertragen. Jetzt erhalte ich jedoch folgenden Fehler:

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)

Von hier hängt es einfach und ich muss endlich CTRL+ Czurück zum Terminal.


Warum liegt ein HTTP-Fehler vor? Drängst du nicht, durch SSH zu github?
Cascabel

Zur Verdeutlichung: Die URL im originAbschnitt von .git/configsagt nicht http, oder?
Cascabel

@Jefromi Ich habe mein privates Repo über den Lese- / Schreib-http-Link geklont.
Stephen Melvin

Nein, es heißt https. Das ist komisch, weil ich vor dem Ausfall zwei Pushs ausführen konnte.
Stephen Melvin

Antworten:


292

Ich hatte das gleiche Problem und glaube, dass es mit der Größe des Repos (bearbeitet - oder der Größe einer bestimmten Datei) zu tun hat, die Sie pushen möchten.

Grundsätzlich konnte ich neue Repos erstellen und auf Github schieben. Aber ein vorhandenes würde nicht funktionieren.

Der HTTP-Fehlercode scheint mich zu sichern. Es handelt sich um einen Fehler "Länge erforderlich". Vielleicht ist es zu groß, um zu berechnen, oder es ist großartig, dass die max. Wer weiß.

BEARBEITEN

Ich habe festgestellt, dass das Problem möglicherweise große Dateien sind. Ich hatte ein Update, das nicht pushen würde, obwohl ich bis zu diesem Punkt erfolgreiche Pushs hatte. Es gab nur eine Datei im Commit, aber es war zufällig 1.6M

Also habe ich die folgende Konfigurationsänderung hinzugefügt

git config http.postBuffer 524288000

Um bis zu einer Dateigröße von 500M zuzulassen und dann hat mein Push funktioniert. Möglicherweise war dies zunächst das Problem, ein großes Repo über das http-Protokoll zu übertragen.

END EDIT

Die Art und Weise, wie ich es zum Laufen bringen konnte (BEARBEITEN, bevor ich postBuffer modifizierte), bestand darin, mein Repo zu tarieren, es auf einen Computer zu kopieren, der Git über SSH ausführen kann, und es auf Github zu verschieben. Wenn Sie dann versuchen, einen Push / Pull vom ursprünglichen Server auszuführen, sollte dies über https funktionieren. (da es sich um eine viel kleinere Datenmenge handelt als bei einem ursprünglichen Push).

Hoffe das hilft.


Hat auch für mich funktioniert, obwohl ich eher einen HTTP 501-Fehler als den 411 hatte. Danke!
Emaad Ahmed Manzoor

Vielen Dank! Dies funktionierte und beschleunigte sogar den Upload. Ich habe versucht, eine Website auf die neuen Windows Azure-Websites zu übertragen, und es ist immer wieder fehlgeschlagen.
Jake

23
Gibt es einen Nachteil, wenn Sie diesen Wert nur sehr hoch einstellen?
Snogglethorpe

@snogglethorpe Potenziell: "Transfer-Encoding: Chunked wird verwendet, um zu vermeiden, dass lokal eine massive Pack-Datei erstellt wird." Wenn Sie den Wert auf etwas Großes setzen, können Sie beim Versuch, Push zu betreiben, massive Pack-Dateien generieren. Nicht alle Dateisysteme verarbeiten massive Dateien gut und sie werden möglicherweise nicht effizient beschnitten. Sie können diese Dateien in .git / objects / pack sehen.
Hanf

Das Ändern von http.postBufferist eher unnötig als schädlich, hat jedoch einen negativen Nebeneffekt: Wenn Sie es über den Standardwert hinaus erhöhen, kann sich die Latenz für größere Pushs erhöhen (da der Client die HTTP-Anforderung in größere Blöcke puffert).
Swatantra Kumar

8

Wenn dieser Befehl nicht hilft

git config http.postBuffer 524288000

Versuchen Sie, die ssh-Methode in https zu ändern

git remote -v
git remote rm origin 
git remote add origin https://github.com/username/project.git

4

Sieht aus wie ein Serverproblem (dh ein "GitHub" -Problem).
Wenn Sie sich diesen Thread ansehen , kann dies passieren, wenn der git-http-backendHeap beschädigt wird (und da nur eine intelligente http-Unterstützung eingerichtet wurde ...).
Was auch immer die eigentliche Ursache ist, kann dies auch mit der jüngsten sporadischen Störung in zusammenhängen einer der GitHub-Dateiserver .

Sehen Sie diese Fehlermeldung immer noch? Denn wenn Sie dies tun:

  • Überprüfen Sie Ihre lokale Git-Version (und aktualisieren Sie auf die neueste Version).
  • Melde dies als GitHub-Fehler .

Hinweis: Der Smart HTTP-Support ist eine große Sache für diejenigen von uns, die hinter einem authentifizierten Enterprise-Firewall-Proxy stehen!

Wenn Sie von nun an ein Repository über die http://URL klonen und einen Git-Client ab Version 1.6.6 verwenden, verwendet Git automatisch den neueren, besseren Transportmechanismus.
Noch erstaunlicher ist jedoch, dass Sie dieses Protokoll jetzt verschieben und auch private Repositorys klonen können. Wenn Sie auf ein privates Repository zugreifen oder ein Mitarbeiter sind und Push-Zugriff wünschen, können Sie Ihren Benutzernamen in die URL eingeben, und Git fordert Sie zur Eingabe des Kennworts auf, wenn Sie versuchen, darauf zuzugreifen.

Ältere Kunden greifen auch auf den älteren, weniger effizienten Weg zurück, sodass nichts kaputt gehen sollte - nur neuere Kunden sollten besser funktionieren.

Stellen Sie also erneut sicher, dass Sie zuerst Ihren Git-Client aktualisieren.


Ich habe ähnliche Probleme mit einem ADSL-WLAN-Router (French Orange Livebox): Es ist unmöglich, meinen SSH-Schlüssel auf github.com zu veröffentlichen. Drücken Sie die Taste über https ..., bis ich einen alternativen Internetzugang verwende.
Yves Martin

Der Smart HTTP-Support hat es geschafft, mich durch unseren Firewall-Proxy zu bringen, als beim Versuch, einen Push durchzuführen, "Fehler: RPC fehlgeschlagen; Ergebnis = 22, HTTP-Code = 0" angezeigt wurde.
Boggin

@ Boggin Ja, ich bestätige, dass Smart http im Allgemeinen die bevorzugte Wahl ist, wenn man sich hinter einem Proxy befindet. Der Standard-http / https-Port wird (fast) immer geöffnet.
VonC


0

Ich habe versucht, auf meinen eigenen gehosteten Bonobo-Git-Server zu pushen, und habe nicht bemerkt, dass der http.postbuffer das Projektverzeichnis bedeutet ...

also nur für andere verwirrte:

Warum? In meinem Fall hatte ich große Zip-Dateien mit Assets und einige PSDs wurden ebenfalls gepusht - zu groß für den Puffer, denke ich.

Vorgehensweise http.postbuffer: Führen Sie diesen Befehl in Ihrem Projekt-Quellcodeverzeichnis neben dem Ordner .git aus, nicht auf dem Server.

Beachten Sie, dass große temporäre Dateien (Chunk-Dateien) mit dieser Puffergröße erstellt werden.

Hinweis: Überprüfen Sie einfach Ihre größten Dateien und legen Sie den Puffer fest.


-2

Das Problem beim Pushen liegt hauptsächlich in der Größe der Dateien, die gepusht werden müssen. Ich habe versucht, einige Bibliotheken mit einer Größe von nur 2 MB zu pushen, dann gab auch der Push einen Fehler von RPC mit Ergebnis 7. Die Leitung hat 4 MBit / s und funktioniert einwandfrei. Einige nachfolgende Versuche zum Push brachten mir Erfolg. Wenn ein solcher Fehler auftritt, warten Sie einige Minuten und versuchen Sie es weiter.

Ich habe auch herausgefunden, dass es einige RPC-Fehler gibt, wenn der Github ausgefallen ist oder ein instabiles Netzwerk an seiner Seite ist.

Es ist also die einzige Option, nach einigen Intervallen weiter zu versuchen!


-2

In diesen Fällen können Sie ssh ausprobieren, wenn https nicht funktioniert.

Sie können auch versuchen, die Puffergröße auf eine astronomische Zahl zu erhöhen, damit Sie sich keine Gedanken mehr über die Puffergröße machen müssen. Git-Konfiguration http.postBuffer 100000000

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.