Подтвердить что ты не робот

Остановить git gc - агрессивный, это плохо?

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

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

4b9b3361

Ответ 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.