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?
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
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.
11443900cookie-checkVermeidung von „Warnung: Es gibt zu viele unerreichbare lose Objekte“ während git svn clone/fetchyes