Остановить git gc - агрессивный, это плохо?
Я запускаю git gc --aggressive
на очень большом репо (apx 100 gb). Он работал с двух ночей назад, и через пару часов он застрял: "Сжатие объектов: 99% (76496/76777)"
Если я Ctrl - C процесс, каковы последствия? Будет ли мое репо непригодным для использования? Моя интуиция говорит "нет", но мне хотелось бы получить некоторые мнения. Спасибо!
Ответы
Ответ 1
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
Это поможет только в том случае, если у вас закончилась нехватка памяти.
Ответ 2
Примечание: есть интересная эволюция для git 2.0 (Q2 2014):
"git gc - агрессивная опция" learn "--depth" и "gc.aggressiveDepth", позволяющая использовать менее сумасшедшую глубину, чем встроенное значение по умолчанию 250.
Это описано в commit 125f814, сделанное Nguyễn Thái Ngọc Duy (pclouds
):
Когда 1c192f3 (gc --aggressive
: сделать его действительно агрессивным - 2007-12-06) сделал --depth=250
значение по умолчанию, это действительно не объясняло причины, особенно плюсы и минусы --depth=250
.
В старой почте из Линуса ниже объясняется это подробно.
Короче говоря, --depth=250
- это дисковая заставка и убийца производительности.
Не все согласны с этой агрессивностью.
Пусть пользователь настроит его.
Это может помочь избежать проблемы с "замораживанием" при запуске этой команды в больших репозиториях.
Ответ 3
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
.