webentwicklung-frage-antwort-db.com.de

Defekte Pipe beim Push auf git Repository

Ich versuche zum ersten Mal einen Code in mein Git-Repository zu schieben, aber ich erhalte die folgende Fehlermeldung:

Counting objects: 222026, done. 
Compressing objects: 100% (208850/208850), done. 
Write failed: Broken pipe222026) 
error: pack-objects died of signal 13 
fatal: The remote end hung up unexpectedly error: failed to Push some refs to 'ssh://[email protected]/<...>'

Ich habe versucht, die http-Puffergröße (git config http.postBuffer 524288000) zu erhöhen, ich habe versucht, git repack, aber es hat nicht funktioniert.

Ich konnte einen sehr ähnlichen Größencode in ein anderes Repository verschieben (es funktionierte nicht wie dieses, aber nach dem git repack funktionierte es). Ich versuche es zu bitbucket zu drücken.

Irgendwelche Ideen?

26
Deadlock

Eine einfache Lösung besteht darin, die HTTP-Post-Puffergröße zu erhöhen, damit größere Chunks in das Remote-Repo verschoben werden können. Geben Sie dazu einfach Folgendes ein:

git config http.postBuffer 52428800

Die Anzahl ist in Bytes, in diesem Fall habe ich sie auf 50 MB gesetzt. Der Standardwert ist 1 MB.

24
Milan Saha

Ich hatte dieses Problem, als ich mit einer Arch-Distribution unter VMWare arbeitete.

Hinzufügen

IPQoS=throughput

zu meiner ssh config (~/.ssh/config) hat mir den trick verholfen.

1
TsTiX

Ich hatte das gleiche Problem und das funktionierte für mich:

git gc --aggressive --Prune

Es dauerte eine Weile, aber nachdem alles erledigt war, funktionierten alle Git-Operationen schneller.
Die zuvor fehlgeschlagene Push-Operation war dann erfolgreich, wahrscheinlich, weil sie schnell genug wurde, um ein Timeout-Problem zu vermeiden.

0
Joe

Das gleiche Problem traf ich beim Hochladen meiner Gigabytes an Daten in das Github-Repository. Das Erhöhen der HTTP-Puffergröße hat bei dieser Datengröße nicht funktioniert. Ich bin nicht sicher, ob es ein Problem von git selbst oder github server ist. Jedenfalls habe ich ein Shell-Skript erstellt, um dieses Problem zu lösen, bei dem Dateien Schritt für Schritt in das aktuelle Verzeichnis hochgeladen werden, und zwar in jedem Schritt weniger als 100 MB an Daten. Es funktioniert gut für mich. Es braucht Zeit, aber ich kann den Bildschirm einfach abnehmen und über Nacht warten.

Hier ist das Shell-Skript: https://Gist.github.com/sekika/570495bd0627acff6c836de18e78f6fd

0
seki

Beachten Sie, dass ein Push immer noch einfrieren kann (selbst wenn PostBuffer erhöht wurde), wenn seine Packdateien beschädigt sind (dh Packobjekte schlagen fehl).

Dies wird in git 2.9 (Juni 2016) festgelegt.

commit c4b2751 , commit df85757 , commit 3e8b06d , commit c792d7b , commit 739cf49 (19 Apr 2016) von Jeff King (peff) .
(Zusammengeführt von Junio ​​C Hamano - gitster - in commit d689301 , 29 Apr 2016)

"git Push" aus einem beschädigten Repository, das versucht, eine große Anzahl von gesperrten Refs zu pushen; Die Benachrichtigungen zum Zurückweisen von Thread für Relay für diese ref-Aktualisierungen wurden beim Schreiben in den Haupt-Thread blockiert, nachdem der Haupt-Thread am empfangenden Ende feststellt, dass der Push fehlgeschlagen ist, und er beschließt, diese Benachrichtigungen nicht zu lesen und einen Fehler zurückzugeben.

Commit 739cf49 hat alle Details.

send-pack: Schließen Sie die Demux-Pipe, bevor Sie den asynchronen Prozess abschließen

Dies behebt einen Deadlock auf der Clientseite, wenn eine große Anzahl von Refs aus einem beschädigten Repo ausgeführt wird. 

0
VonC