В Git 2.17 (второй квартал 2018 г.) вам придется добавить git commit
в список команд, вызывающих git gc --auto
.
На самом деле, так должно было быть с самого начала Git.
См. commit 095c741 (28 февраля 2018 г.) от Ævar Arnfjörð Bjarmason (avar
).
(объединено Хунио C Хамано -- gitster
-- в commit 9bb8eb0 а>, 08 марта 2018 г.)
commit
: запустить git gc --auto
прямо перед хуком post-commit
Измените поведение git-commit
обратно на то, что было в d4bb43e ("Вызов" git gc --auto
«из commit
, merge
, am
и rebase
.», 05 сентября 2007 г., Git v1.5.4-rc0), когда было git-commit.sh
.
Вскоре после этого в f5bbc32 ("Port git commit
to C.", 2007-11-08 , Git v1.5.4-rc0), когда он был перенесен на C, вызов «git gc --auto
» исчез.
После этой непреднамеренной регрессии git gc --auto
работало только для git-am
, git-merge
, git-fetch
и git-receive-pack
.
Можно было написать сценарий, который "git commit
" выдавал бы много данных локально, а gc
никогда не запускался.
Один из таких репозиториев, который локально фиксирул сгенерированные изменения файла зоны, вырос до размера ~ 60 ГБ, прежде чем ежедневное задание cron было добавлено к «git gc
», в результате чего его размер уменьшился до менее 1 ГБ. Это заставит такие дела работать без вмешательства.
Я думаю, что исправление таких патологических случаев, когда репозиторий будет расти вечно, является достойным компромиссом для того, чтобы потратить пару миллисекунд на вызов «git gc --auto
» (в обычных случаях, когда он ничего не делает).
Вы можете найти другую иллюстрацию этого списка с Git 2.27 (второй квартал 2020 г.), который учит "am
", "commit
", "merge
" и "rebase
", когда они запускаются с параметром "--quiet
", передавать "--quiet
" до "gc --auto
".
См. коммит 7c3e9e8, коммит 850b6ed (6 мая 2020 г.), автор Junio C Хамано (gitster
).
(Объединено Юнио С. Хамано -- gitster
-- a> в commit 3af459e, 13 мая 2020 г.)
auto-gc
: извлечение многоразового помощника из "git fetch
"
Отзыв: Тейлор Блау
Еще в 1991006c (fetch
: преобразовать argv_gc_auto
в структуру argv_array
, 16 августа 2014 г., Git v2.1.1), мы научили "git fetch --quiet
" передавать параметр "--quiet
" вниз до "gc --auto
".
Однако эта проблема не ограничивается «выборкой»:
$ git grep -e 'gc.*--auto' \*.c
находит совпадения в «am
», «commit
», «merge
» и «rebase
», и эти команды не передают «--quiet
» вниз к «gc --auto
», когда им самим говорят замолчать.
В качестве подготовительного шага давайте представим вспомогательную функцию run_auto_gc()
, в которую вызывающая сторона может передать логическое значение «quiet
» и повторно исправить «git fetch
» с помощью вспомогательной функции.
person
VonC
schedule
11.03.2018
git rebase
скоро будет обрабатыватьgit gc --auto
более разумным способом: см. stackoverflow.com/a/35033755/6309 - person VonC   schedule 27.01.2016git commit
, начиная с Git 2.17 (второй квартал 2018 г.). См. мой ответ ниже - person VonC   schedule 11.03.2018