Informationen zum Pushlimit
GitHub hat eine Maximalgrenze von 2 GiB für einen einzelnen Push. Dieser Grenzwert wird möglicherweise erreicht, wenn Sie zum ersten Mal versuchen, sehr große Repositorys hochzuladen, große Repositorys von anderen Plattformen zu importieren, oder wenn Sie versuchen, den Verlauf großer vorhandener Repositorys neu zu schreiben.
Wenn Sie diesen Grenzwert erreicht haben, wird möglicherweise eine der folgenden Fehlermeldungen angezeigt:
fatal: the remote end hung up unexpectedlyremote: fatal: pack exceeds maximum allowed size
Sie können Ihren Push entweder in kleinere Teile aufteilen oder den Git-Verlauf löschen und von Grund auf neu beginnen. Wenn Sie einen einzelnen Commit vorgenommen haben, der größer als 2 GiB ist und Sie den Git-Verlauf nicht löschen und von Grund auf neu beginnen können, müssen Sie eine interaktive Neubasis ausführen, um den großen Commit in mehrere kleinere aufzuteilen.
Aufteilen eines großen Pushs
Sie können es vermeiden, die Grenze zu erreichen, indem Sie Ihren Push in kleinere Teile unterteilen, von denen jede unter 2 GiB groß sein sollte. Wenn sich innerhalb dieses Größenlimits eine Verzweigung befindet, können Sie alles auf einmal verschieben. Wenn ein Branch jedoch größer als 2 GiB ist, müssen Sie den Push in kleinere Teile aufteilen und nur einige Commits auf einmal pushen.
-
Wenn Sie die Remoteverbindung noch nicht konfiguriert haben, fügen Sie das Repository als neue Remoteverbindung hinzu. Weitere Informationen finden Sie unterRemote-Repositorys verwalten.
-
Um geeignete Commits entlang des Verlaufs der Hauptverzweigung in Ihrem lokalen Repository zu finden, führen Sie den folgenden Befehl aus:
git log --oneline --reverse refs/heads/BRANCH-NAME | awk 'NR % 1000 == 0'Dieser Befehl zeigt jeden 1000. Commit an. Sie können die Zahl vergrößern oder verkleinern, um die Schrittgröße anzupassen.
-
Übertragen Sie jeden dieser Commits einzeln auf Ihr von GitHub gehostetes Repository.
git push REMOTE-NAME +<YOUR_COMMIT_SHA_NUMBER>:refs/heads/BRANCH-NAMEWenn die Meldung
remote: fatal: pack exceeds maximum allowed sizeangezeigt wird, verringern Sie die Schrittgröße in Schritt 2, und versuchen Sie es erneut. -
Durchlaufen Sie denselben Prozess für jeden Commit, den Sie im Verlauf von Schritt 2 identifiziert haben.
-
Wenn dieses Repository zum ersten Mal an GitHub übertragen wird, führen Sie einen endgültigen Spiegel-Push aus, um sicherzustellen, dass alle verbleibenden Verweise nach oben verschoben werden.
git push REMOTE-NAME --mirrorWenn dies immer noch zu groß ist, müssen Sie andere Verzweigungen in Phasen mit denselben Schritten nach oben verschieben.
Sobald Sie mit dem Verfahren vertraut sind, können Sie die Schritte 2 bis 4 automatisieren, um den Prozess zu vereinfachen. Zum Beispiel:
step_commits=$(git log --oneline --reverse refs/heads/BRANCH-NAME | awk 'NR % 1000 == 0')
echo "$step_commits" | while read commit message; do git push REMOTE-NAME +$commit:refs/heads/BRANCH-NAME; done
Von Grund auf neu starten
Wenn das Repository keinen Verlauf hat oder Ihr anfänglicher Commit allein über 2 GiB groß war und es Ihnen nichts ausmacht, den Git-Verlauf zurückzusetzen, können Sie auch komplett neu anfangen.
-
Löschen Sie auf Ihrer lokalen Kopie den ausgeblendeten
.git-Ordner, um den gesamten vorherigen Git-Verlauf zu entfernen, und konvertieren Sie ihn wieder in einen normalen Ordner voller Dateien. -
Erstellen eines neuen leeren Ordners
-
Führen Sie
git initundgit lfs installim neuen Ordner aus, und fügen Sie das neue leere GitHub-Repository als Remote hinzu. -
Wenn Sie bereits Git Large File Storage verwenden und alle Git Large File Storage Nachverfolgungsregeln, die Sie verwenden möchten, bereits in der
.gitattributes-Datei im alten Ordner aufgelistet haben, sollte dies die erste Datei sein, die Sie in den neuen Ordner kopieren. Sie sollten sicherstellen, dass die Nachverfolgungsregeln vorhanden sind, bevor Sie andere Dateien hinzufügen, sodass es keine Möglichkeit gibt, dass Elemente, die für Git LFS vorgesehen sind, in den regulären Git-Speicher gespeichert werden.Wenn Sie Git LFS noch nicht verwenden, können Sie diesen Schritt überspringen oder die Nachverfolgungsregeln einrichten, die Sie in der
.gitattributes-Datei im neuen Ordner verwenden möchten, bevor Sie andere Dateien kopieren. Weitere Informationen finden Sie unterGit Large File Storage konfigurieren. -
Verschieben Sie Batches von Dateien, die kleiner als 2 GiB sind, aus dem alten Ordner in den neuen Ordner. Nachdem jeder Batch verschoben wurde, erstellen Sie einen Commit, und übertragen Sie ihn, bevor Sie den nächsten Batch verschieben. Sie können vorsichtig vorgehen und sich an etwa 2 GiB halten. Wenn Sie über einen Ordner mit Dateien verfügen, die für Git LFS vorgesehen sind, können Sie diese Dateien im Hinblick auf das 2 GiB-Limit pro Batch ignorieren.
Sobald der alte Ordner leer ist, sollte das GitHub-Repository alles enthalten. Wenn Sie Git LFS verwenden, sollten alle Dateien, die für Git LFS vorgesehen sind, an den Git LFS-Speicher übertragen werden.