2015-01-30 5 views
3

Мне было интересно: когда Git выполняет свою сборку мусора? Я знаю, что в прошлом нужно было вызвать git gc, чтобы вручную запустить сборку мусора, но теперь это делается автоматически, когда?Git: Когда Git выполняет сборку мусора?

Кроме того, есть ли необходимость вызывать его вручную в последних версиях Git?

+0

Связанные вопрос: https://stackoverflow.com/questions/5137447 – selurvedu

ответ

12

Большая часть ответа заключается в 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 
Смежные вопросы