Vermeidung von „Warnung: Es gibt zu viele unerreichbare lose Objekte“ während git svn clone/fetch

Lesezeit: 3 Minuten

Beim Laufen a git svn clone oder git svn fetch Bei einem großen Subversion-Repository (über 100.000 Commits) stoppt der Abruf regelmäßig mit:

Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
error: The last gc run reported the following. Please correct the root cause and remove .git/gc.log.
Automatic cleanup will not be performed until the file is removed.

warning: There are too many unreachable loose objects; run 'git prune' to remove them.

gc --auto: command returned error: 255

Um die Wiederherstellung durchzuführen, muss ich den Anweisungen folgen, ein aggressiveres Pruning und gc ausführen, die Protokolldatei entfernen und fortfahren, nur damit es erneut passiert, nachdem ein weiterer Stapel von beispielsweise 10.000 Commits gelesen wurde.

Wie kann dieses Problem vermieden werden?

Benutzer-Avatar
Hobbs

Ich denke, wenn Sie die Konfigurationsoption setzen gc.pruneExpire zu now, zumindest vorübergehend während des Imports, wird diese Meldung vermieden. Wenn diese Option eingestellt ist, git gc wird sofort gelöscht alle nicht erreichbare Objekte, anstatt nur solche, die mindestens zwei Wochen alt sind (Standard). Gepaart mit einem vernünftigen Wert für gc.auto Dies sollte verhindern, dass sie sich bis zu dem Punkt ansammeln, an dem Sie diese Nachricht erhalten.

Selbstantwortend.

git svn Operationen gehören zu denen, die Hintergrund starten gc --auto Haushaltsführung. In diesem Fall glaube ich, dass der laufende Fortschritt der git svn fetch kann dazu führen, dass die Anzahl der nicht erreichbaren/losen Objekte irgendwann in der gc-Operation den Auth-Schwellenwert überschreitet, was zu dieser Warnung führt. Leider ist es fatal für den laufenden Abruf.

Meine Lösung besteht darin, diese gc-Operationen vorübergehend zu deaktivieren/verdächtigen, indem ich gc auto deaktiviere, wie in seiner Handbuchseite beschrieben:

git config gc.auto 0

Einmal die git svn fetch Vorgang abgeschlossen ist, können Sie diese Konfiguration bei Bedarf entfernen und manuelle vollständige GC-, Prune- und Repack-Vorgänge ausführen, um das endgültige Repository zu optimieren.

Diese Warnung wurde bei Git Pull angezeigt:

$ git pull
remote: Enumerating objects: 22, done.
remote: Counting objects: 100% (22/22), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 22 (delta 17), reused 22 (delta 17), pack-reused 0
Unpacking objects: 100% (22/22), done.
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
error: The last gc run reported the following. Please correct the root cause
and remove .git/gc.log.
Automatic cleanup will not be performed until the file is removed.

warning: There are too many unreachable loose objects; run 'git prune' to remove them.

Already up-to-date.

Schauen Sie sich die Warndatei an, da ist nicht viel:

$ cat .git/gc.log
warning: There are too many unreachable loose objects; run 'git prune' to remove them.

Lesen Sie die Hilfe:

$ git help gc

Klingt so, als sollten wir einiges davon regelmäßig tun

Führen Sie die gelegentlich empfohlene aggressive Option aus

$ git gc --aggressive
Counting objects: 41544, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (40544/40544), done.
Writing objects: 100% (41544/41544), done.
Total 41544 (delta 30536), reused 7801 (delta 0)
Removing duplicate objects: 100% (256/256), done.
Checking connectivity: 46959, done.

Log-Warnung entfernen:

$ rm .git/gc.log 

Lächeln

:)

Beachten Sie, dass in diesem Fall beim Entfernen .git/gc.log ist die Lösung, die Entfernung wird einfacher sein.

Mit Git 2.34 (4. Quartal 2021) wurde ein Pfadname in einer Hinweisnachricht zum Ausschneiden und Einfügen bereit gemacht.

Sehen b45c172 begehen (31. August 2021) von Ævar Arnfjörð Bjarmason (avar).
(Zusammengeführt von Junio ​​C. Hamano — gitster in Commit 02d263210.09.2021)

gc: Entfernen Sie den abschließenden Punkt aus der Zeile “gc.log”.

Unterzeichnet von: Ævar Arnfjörð Bjarmason
Vorgeschlagen von: Jan Judas

Entfernen Sie den abschließenden Punkt aus der Warnung, die wir ausgeben gc.log.
Es ist üblich, dass verschiedene Terminal-UX dem Benutzer erlauben, “Wörter” auszuwählen, und durch Einschließen des abschließenden Punktes einen Benutzer den Pfad auswählen möchten gc.log müssen den abschließenden Punkt manuell entfernen.

Ein solcher Benutzer müsste wahrscheinlich auch den Pfad anpassen, wenn er zB Leerzeichen enthält, aber dies sollte diesen sehr häufigen Fall beheben.

1144390cookie-checkVermeidung von „Warnung: Es gibt zu viele unerreichbare lose Objekte“ während git svn clone/fetch

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy