Избегая "предупреждение: слишком много недостижимых свободных объектов" во время git svn clone / fetch
при выполнении git svn clone
или git svn fetch
против большого репозитория Subversion (100k + commits) выборка регулярно останавливается с:
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
чтобы восстановить, я должен следовать инструкциям, запустить более агрессивную чернослив и gc, удалить файл журнала и продолжить, только чтобы это произошло снова после чтения другой партии коммитов 10k.
как можно избежать этой проблемы?
2 ответов
Я думаю, если вы установите параметр config gc.pruneExpire
до now
, по крайней мере временно во время импорта, это позволит избежать этого сообщения. С этой опцией, git gc
немедленно удалить все недостижимые объекты, а не только те, которым не менее двух недель (по умолчанию). В сочетании с разумным значением для gc.auto
это должно помешать им накапливаться до того момента, когда вы получите это сообщение.
самостоятельно отвечает.
git svn
операции относятся к тем, которые запускают background gc --auto
операции, уборка. В этом случае я считаю, что продолжающийся прогресс git svn fetch
может привести к тому, что количество недостижимых / свободных объектов в какой-то момент операции gc превысит порог auth, что приведет к этому предупреждению. К сожалению, это фатально для текущей выборки.
мое решение-временно отключить / подозревать эти операции gc, деактивация gc auto, как описано на странице руководства:
git config gc.auto 0
после git svn fetch
операция завершена, при желании вы можете удалить эту конфигурацию и выполнить ручные операции полного gc, prune и repack для оптимизации конечного репозитория.