Избегая "предупреждение: слишком много недостижимых свободных объектов" во время 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 для оптимизации конечного репозитория.