Git hängt beim Schreiben von Objekten

100

Ich versuche es git push -u origin masterund es hängt einfach an

Writing objects:  99% (219/220), 12.65 MiB | 97 KiB/s

Der 12.65Teil verschiebt sich. Wenn ich den Prozess beende und erneut ausführe, wird er zu 99% fortgesetzt, aber nie wie zuvor beendet.

Es ist nie erfolgreich geschoben. Dies ist das erste Commit.

mattalxndr
quelle
Wohin möchten Sie pushen? Verwenden Sie SSH oder ein anderes Protokoll?
Paŭlo Ebermann
25
Würde die http.postbufferHilfe einstellen ? stackoverflow.com/questions/6842687/…
VonC
3
VonCs Kommentar ist zu leicht zu übersehen. Für mich geht das.
Thuan
1
Unglaublich. Das hat es auch für mich getan. Und jetzt ist es 2018. Und es ist SSH, nicht HTTP. Und das ganze Repo ist wie 15 MB. Und der "entfernte" Server ist localhost. Hör auf, Git zu romantisieren, Leute, bitte! ;)
Gr.

Antworten:

218

Ich folgte VonCs Rat:

git config --global http.postBuffer 524288000

Für zukünftige Referenzen, basierend auf Kommentaren:

500 MB: 524288000 (as posted in the original answer)
1 GB: 1048576000
2 GB: 2097152000 (anything higher is rejected as 'out of range')
Hugo Forte
quelle
4
omg, danke dafür! zog mir die Haare aus und das löste meine Probleme!
Brett Thomas
3
@HugoForte Das Erhöhen des Puffers schien mein hängendes Schreiben von Dateien zu beheben, aber mein Git-Push wurde nie abgeschlossen (hing danach Writing objects: 100%) - zuvor hing er bei 25%, was eindeutig half. Ich bekam jedoch immer noch "seltsames" Verhalten. Ich habe mein System neu gestartet und dies schien die Dinge zu lösen ... FYI ... Wenn jemand nach dem Erhöhen seines Puffers immer noch Probleme hat, hat ein Neustart meines Systems in meiner Situation geholfen (eine Lösung der alten Schule, aber ein neuer Neustart hat wirklich geholfen).
Twknab
4
Kann jemand erklären, woher die Nummer 524288000kommt?
Ryre
6
@ Ryre es ist 500 MB
Hugo Forte
1
Gott segne dich und Stackoverflow, ich wäre ein völliger Verlierer ohne,
decoder7283
35

Dies geschah aufgrund einer riesigen, nicht signierten Datei im Repo-Verzeichnis. Hoppla.

BEARBEITEN

Der Hang war, weil das Hochladen der Datei lange dauerte. Die Datei sollte nicht im Push enthalten sein.

BEARBEITEN

Zwar trifft es zu, dass eine große Datei der Grund für dieses Problem sein könnte, wenn Sie die Datei nicht in Frage ignorieren oder einfach nur haben zu schieben , um es dann folgt dieser Antwort.

mattalxndr
quelle
@ TimoSolo Warum sollte ich das tun? Ich war derjenige mit dem Problem und habe die genaue Lösung dokumentiert. Ziemlich einfach.
Mattalxndr
4
Ja, Sie haben das Problem behoben. Für andere Leute, die tatsächlich eine große Datei pushen müssen, löst die Antwort von @ hugo-forte das Problem. Sie müssen nicht haben , ich dachte , es wäre mehr Menschen helfen - im Geiste der SO.
TimoSolo
1
Die Frage lautet nicht "Wie kann ich eine große Datei festschreiben und dann pushen?". Es ist "Mein Git Push ist endlos. Warum?" Wenn Sie nicht erwarten, dass der Push ewig dauert, wollten Sie (wie ich) diese riesige Datei wahrscheinlich nicht festschreiben.
Mattalxndr
3
@mattalxndr Wenn die akzeptierte Antwort 1/8 der Stimmen hat, sollten Sie sie wahrscheinlich ändern.
NorCalKnockOut
1
@mattalxndr Keine der Antworten ist perfekt. Einer identifiziert die Ursache und der andere bietet eine Lösung. Die ideale Antwort würde die Ursache identifizieren, erklären, warum sie das gegebene Ergebnis hat, und die zwei alternativen Lösungen anbieten. IMO, von den aktuellen Optionen ist die Antwort von Hugo Forte überlegen, da sie das Problem löst, unabhängig davon, ob Sie die Datei pushen wollten oder nicht. Es geht nicht darum, die Leute zu ignorieren, die den gleichen Fehler gemacht haben, den Sie gemacht haben. Es behebt das Problem für sie genauso wie für alle anderen, überlässt es ihnen jedoch, eine Datei zu entfernen, wenn sie nicht beabsichtigen, sie zu pushen.
BZ1
7

Ich hatte das gleiche Problem mit (Schreiben von Objekten% 16), das dann tödlich war. Ich habe dieses Problem gelöst, indem ich die aktuellen Änderungen gespeichert, ein neues Repository geklont und dann die geänderten Dateien in das Repository kopiert habe.

Z.B. Angenommen, das aktuelle Repository ist A, dann müssen Sie nur noch Folgendes tun:

  1. mv A B
  2. git clone A
  3. mv B/* A/
  4. rm -rf B

Dann festschreiben und pushen und alles hat gut funktioniert. Die verschobenen Dateien wurden als geändert erkannt :)

Maha
quelle
Sie hatten ein anderes Symptom. Meins hatte keine schwerwiegenden Fehler.
Mattalxndr
5

In meinem Fall habe ich einen Git-Ordner mit fehlerhaften Rechten verwendet, der auf demselben Laufwerk wie ein Repo gespeichert ist. Dies kann jedoch auch bei ssh der Fall sein, wenn Sie einen autorisierten Login-Benutzer verwenden.

Überprüfen Sie dann, ob Sie die richtigen Schreibrechte für das entfernte Repo haben.

Beispiel:

Init lokales und entferntes Repo

git init /tmp/src
git init --bare /tmp/dst
cd /tmp/src

Remote-Repo zum Ursprung hinzufügen

src > git remote add dest /tmp/dst

Problem simulieren

src > chmod -R 555 /tmp/dst

Hinzufügen einer gefälschten Datei und Verschieben

src > touch a && git add a && git commit -m 'demo'
src > git push --set-upstream dest master
src > git push
Counting objects: 3, done.
Writing objects: 99% (2/3), 202 bytes | 0 bytes/s.

Git hängt

Lösung

src > chmod -R 775 /tmp/dst
Naewis
quelle
2
Bitte erwägen Sie, Ihrer Antwort einige weitere beispielhafte Details hinzuzufügen, danke.
Mirza Sisic
1
Es tut uns leid. Ist es besser ?
Naewis
3

In meiner Situation war es die Größe der Datei. Durch Hinzufügen einer Gitignore-Datei mit den erforderlichen Erweiterungen konnte ich die meisten unerwünschten Dateien, die übertragen werden sollten, ignorieren.

Skitty
quelle
2

In meinem Fall hatte ich eine langsame Internet-Upload-Geschwindigkeit und die Datei, die ich pushen wollte, war groß. Der Trick besteht darin, Git LFS (Large File Storage) zu verwenden, das viel geduldiger ist, um große Dateien hochzuladen. Ein Git LFS-Tutorial finden Sie hier

user3160702
quelle
1

git clean -f -nlöst mein Problem. Es gibt viele nicht verfolgte Dateien, die nicht erkannt wurden. Aber seien Sie vorsichtig, da dadurch Dateien in Ihrem Verzeichnis entfernt werden

Sherlock
quelle
3
Welche Dateien werden speziell entfernt?
Jazimov
1

In meinem Fall habe ich versucht zu pushen, ohne die Regeln meines Unternehmens zu erfüllen. Ich habe später erfahren, dass wir unsere Commit-Nachrichten mit "MOBIL-XXXX" beginnen sollten, wobei XXXX die Nummer ist, die Entwickler in Jira (einem anderen Tool, mit dem wir den Entwicklungsprozess verfolgen) von Analisten zugewiesen bekommen.

Stellen Sie sicher, dass Ihr Unternehmen eine ähnliche Einschränkungsregel hat.

Onat Korucu
quelle