Большая часть ответа заключается в git gc
documentation:
--auto
С этой опцией, мерзавец гх требуется проверяет, является ли какой-либо домашнее хозяйство; если нет, он выходит без выполнения каких-либо работ. Некоторые команды git запускают git gc --auto
после выполнения операций, которые могут создавать множество незакрепленных объектов.
Домашнее хозяйство требуется, если в репозитории слишком много свободных объектов или слишком много пакетов. Если количество незакрепленных объектов превышает значение конфигурации конфигурации gc.auto
, то все незакрепленные объекты объединяются в один пакет с использованием git repack -d -l
. Установка значения gc.auto
в 0 отключает автоматическую упаковку рыхлых объектов.
Если число пакетов превышает значение gc.autopacklimit
, то существующие пакеты (за исключением тех, отмеченные .keep
файлом) объединены в единый пакет, используя -A
вариант git repack
. Установка gc.autopacklimit
на 0 отключает автоматическую консолидацию пакетов.
Единственное, что отсутствует здесь, это объяснение того, какие команды «некоторые» могут выполняться git gc --auto
, и когда. Этот список может быть изменен, но, глядя на источник тока мерзавца, они выделяются:
git fetch
git merge
git receive-pack
git am
git rebase
(это из git grep -e --auto -- '*.c' '*.sh'
и глазного яблока, исключая все t/
тесты скриптов и других очевидных ложных ударов). Если вы хотите что-то более подробно, источник мерзавцу на github.com
...
Примечание: with Git 2.17 (Q2 2018), вам необходимо также учитывать:
git commit
Связанные вопрос: https://stackoverflow.com/questions/5137447 – selurvedu