Erwartetes Verhalten
I edited file1, engagiert, und tat diesgit push nie abgeschlossen - wird nur auf Gesamtleitung
$ git push
NOTICE: Only authorized blah blah blah...
Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 676 bytes | 0 bytes/s, done.
Total 7 (delta 4), reused 0 (delta 0)
To ssh://[email protected]:/opt/git/fooBar.git
28ad03d..73ae492 master -> master
$
Problem
Dann bearbeiten ich file2 im selben Projekt, verpflichtet und tat dies:
$ git push
NOTICE: Only authorized blah blah blah...
Counting objects: 10, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (10/10), 1.42 KiB | 0 bytes/s, done.
Total 10 (delta 4), reused 0 (delta 0)
^C
Beachten Sie, wie ich zu CTRL-C hatte (^C
) am Ende? Das ist, weil es nie abgeschlossen wurde. Dies ist NICHT das erwartete Verhalten.
fehlgeschlagen Bewältigungsmechanismen
So I:
cd ..
mv fooBar/ fooBar_bak/
git clone ssh://[email protected]:/opt/git/fooBar.git
cd fooBar
bearbeiten einige andere Textdatei (nur eine leere Zeile hinzugefügt), gedrückt, und es funktionierte. Dies bedeutet, dass ich nach dem fehlgeschlagenen Push einen erfolgreichen Push von/zu denselben lokalen/entfernten Repositories vor und durchgeführt habe.
Aber bearbeiten Sie Datei2, die es vorher nicht mochte? Der Push wird nie abgeschlossen. Das Gleiche gilt für Datei3, die es auch nicht mag. Ich sehe nichts besonderes an diesen Dateien.
Nun, Datei2 und Datei3 sind UTF-8 und Datei1 ist ASCII, aber das sollte keine Rolle spielen. Sollte es?
Ich versuchte alle Lösungen bei git push hangs after Total line, aber keine funktionierte für mich.
Ich habe nicht wirklich die Ausgabe von strace -efile -f git push
verstanden, aber nichts sprang auf mich.
Ich wartete. Aber das ist kein großes Repo oder eine große Datei.
Ich benutze Ubuntu 16.04 mit git Version 2.7.4 auf meinem Rechner und git Version 1.7.1 auf dem CentOS Server. Ich habe keine msysgit, git-for-windows oder cygwin installiert.
git push -u origin master
hat auch nicht funktioniert.
git config http.postBuffer 524288000
machte keinen Unterschied.
GIT_CURL_VERBOSE=1
und GIT_TRACE=1
hatten keine Wirkung.
git config --global core.askpass "git-gui --askpass"
habe nichts getan, wahrscheinlich weil ich git-gui nicht installiert habe.
@ RonanDejhero's Vorschlag hier: https://stackoverflow.com/a/21032615/1128668 war, was mir erlaubt zu sehen, dass einige Dateien geändert werden können, verpflichtet und geschoben und einige können nicht. Ich habe versucht, die geänderten Dateien zu kopieren, die Dateien manuell zu ändern und geringfügig andere Änderungen vorzunehmen: nicht gut.
Auf dem Server tat ich sudo chown -R me.git-users /opt/git/
, aber das machte auch keinen Unterschied. Wenn ich in der Vergangenheit solche Probleme hatte, schien das zu helfen.
Ich habe eine git gc
in meinem lokalen Repo und auf dem Server in /opt/git/fooBar.git. Keine Freude.
aktualisieren
Ich löschte meine lokalen Repo, geklont, bearbeitet file2 (die git nicht, bevor sie bearbeitet haben mögen) von nur eine leere Zeile hinzufügen. Engagiert, gedrückt, es hat funktioniert! Dann habe ich ein Dutzend Zeilen unbenutzten Code auskommentiert, den ich geschoben habe, und es hat funktioniert! Könnte ich einen Charakter oder etwas eingeführt haben, das Git nicht mochte?
Worauf Sie warten, nach der "Total" -Zeile, ist das andere Ende, zurück zu kommen und zu sagen "Ja, ich habe Ihre Ref-Updates akzeptiert" oder "Nein, ich lehne Ihre Updates ab" (eine Antwort pro Zweig) oder Tag-Update, das Sie senden, was in diesem Fall nur der eine Zweig ist). Das Problem ist also * am anderen Ende *, wahrscheinlich aufgrund eines fehlerhaften Hooks. Es muss von diesem Ende aus diagnostiziert werden. – torek