Как я могу исправить эти проблемы Git GC?
У меня периодически возникает проблема, когда мое git-репо (я думаю?) Решит, что ему нужно собрать мусор. Этот процесс длится более получаса, а затем будет запускаться при каждой операции вытягивания / толкания.
Запуск Git GC вручную занимает полчаса, но, похоже, это не решает проблему. Единственное решение, которое я нашел, - это удалить мой репо и клонировать заново, что неоптимально по ряду причин.
Мои операции git GC могут быть медленными, потому что я установил для git некоторые ограничения памяти, чтобы предотвратить его падение при операциях git GC, как это было раньше, когда он достигал предела памяти в 4gb windows, а затем вырубался.
Любая помощь будет оценена. Это большой репозиторий, репо содержит значительное количество двоичных данных, а также большое количество очень больших (>500 КБ) текстовых файлов.
Итак, 1. Как мне ограничить количество, которое Git решает собрать мусором. 2. Как мне ускорить работу ГХ? 3. Что я могу сделать, чтобы решить или минимизировать более серьезные проблемы (иначе говоря, почему он должен собирать мусор в первую очередь)?
2 ответа
Единственный реальный способ обойти это - уменьшить размер вашего хранилища. Вы можете отключить автоматическую сборку мусора с git config --global gc.auto 0
, но это увеличит ваш сетевой трафик на пушах и пуллах, если они вообще все еще работают, и увеличит ваше локальное дисковое пространство, используемое для git. Без git gc
ваше локальное хранилище будет содержать полную копию каждой ревизии каждого файла, который вы изменяете. Тем не менее, это может быть осуществимо, если вы делаете что-то вроде запуска git gc
каждую ночь, пока тебя нет.
Я бы порекомендовал посмотреть что-то вроде git annex, которое было разработано для таких ситуаций, как ваша. Он в основном хранит указатель на большие файлы в вашем репо, а не сами файлы.
Примечание: коммит из Git 2.17 (Q2 2018) указывает на существование хука, что git gc --auto
будет вызывать, и что может быть полезным, чтобы минимизировать влияние этой команды.
Вы можете прочитать больше о git gc --auto
в " Понимании" git gc --auto
".
Образец auto-gc
крюк (в contrib/
) Пропустить auto-gc
в то время как на батарее был обновлен, чтобы почти всегда разрешать запуск auto-gc
если on_ac_power
Команда абсолютно уверена, что мы работаем от батареи (ранее она пропускалась, если только команда не была уверена, что мы работали от сети).
См. Коммит 781262c (28 февраля 2018 г.) Адама Боровски ( kilobyte
)
(Объединено Юнио С Хамано - gitster
- в комитете b423234 от 14 марта 2018 года)
hooks/pre-auto-gc-battery
: разрешатьgc
работать на не-ноутбукахНастольные компьютеры и серверы, как правило, не имеют датчика мощности, поэтому
on_ac_power
возвращает 255 ("неизвестно"). Итак, давайте возьмем любой ответ, кроме 1 ("battery
") как нет противопоказаний для запускаgc
,Если этот инструмент возвращается
unknown
msgstr "нет смысла запрашивать другие источники, так как он уже запрашивал их, и он умнее нас (может работать с несколькими адаптерами).
Так что, в зависимости от вашего случая, настройка этого крючка может помочь вам высказать свое мнение о том, git gc --auto
должен выполнить или нет.