Остановка git gc --aggressive, это плохо?

Я бегу git gc --aggressive на очень большой репо (около 100 ГБ). Он работает с двух ночей назад, и на пару часов он застрял на: "Сжатие объектов: 99% (76496/76777)"

Если я Ctrl-C процесс, каковы последствия? Будет ли мой репо непригодным для использования? Моя интуиция говорит, что нет, но я хотел бы получить некоторые мнения. Спасибо!

3 ответа

Решение

git должен быть всегда защищен от подобных прерываний. Если вы беспокоитесь, я предлагаю Ctrl+Z, а затем запустить git fsck --full чтобы убедиться, что система соответствует.

Существует ряд переменных git-config, которые могут помочь вашему git-gc работать быстрее. Я использую следующее в одном конкретном репо, но есть еще много вариантов, которые можно попробовать случайным образом (или тщательно изучить, в зависимости от того, что именно).

git config pack.threads 1
git config pack.deltaCacheSize 1
git config core.packedGitWindowSize 16m
git config core.packedGitLimit 128m
git config pack.windowMemory 512m

Это поможет, только если ваша проблема заключается в том, что у вас недостаточно памяти.

FWIW, я просто испортил хранилище, отменив git gc с помощью CTRL+C. git fsck Теперь отображаются следующие ошибки:

error: HEAD: invalid sha1 pointer [...]
error: refs/heads/master does not point to a valid object!
notice: No default references

И довольно много

dangling commit [...]

Я не собираюсь исследовать это, но я хотел бы отметить, что я собираюсь избегать прерывания git gc,

Примечание: есть интересная эволюция для git 2.0 (2 квартал 2014 года):

опция "git gc --aggressive" learn "--depth" и переменная конфигурации "gc.aggressiveDepth" позволяют использовать меньшую глубину безумия, чем встроенное значение по умолчанию 250.

Это описано в коммите 125f814, сделанном Нгуеном Тай Нгом Дуй ( pclouds ):

Когда 1c192f3 (gc --aggressive: сделай его действительно агрессивным - 2007-12-06) сделал --depth=250 значение по умолчанию, оно не объясняет причину, особенно плюсы и минусы --depth=250,

Старое письмо от Линуса ниже объясняет это подробно.
Короче, --depth=250 это заставка диска и убийца производительности.
Не все согласны с этой агрессивностью.
Позвольте пользователю настроить его.

Это может помочь избежать проблемы "зависания", которая возникает у вас при запуске этой команды на больших репозиториях.

Другие вопросы по тегам