Список всех команд, вызывающих git gc --auto

Есть ли где-нибудь полный список команд, вызывающих git gc --auto бежать? Страница руководства git-gc(1) просто утверждает:

--авто

С помощью этой опции git gc проверяет, требуется ли какая-либо служебная работа; если нет, он выходит без выполнения какой-либо работы. Некоторые команды git запускаются git gc --auto после выполнения операций, которые могут создать много незакрепленных объектов.

(выделение добавлено)

Я нахожусь в процессе организации большой миграции из SVN в Git. Подавляющее большинство пользователей будет работать на ПК с Windows, и немалая часть из них не технична. Они будут использовать TortoiseGit (так как он близко соответствует TortoiseSVN, с которым они уже знакомы) - я заметил, что TortoiseGit не включает в себя никаких функций для запуска git gc вручную вообще.

Нельзя ожидать, что нетехническому персоналу придется запускать командную строку "git bash" для запуска git gc --auto из соответствующего рабочего каталога; и поскольку мы используем "переносимый" дистрибутив MsysGit, у них не будет ярлыка контекстного меню оболочки "Git GUI Here..".

Разумно ли ожидать, что с течением времени Git будет в основном самоподдерживаться, или мне нужно попытаться разработать нетехнический удобный метод вызова git gc --auto?

2 ответа

Решение
builtin/merge.c:            const char *argv_gc_auto[] = { "gc", "--auto", NULL };
builtin/receive-pack.c:     "gc", "--auto", "--quiet", NULL,
git-am.sh:                  git gc --auto
git-rebase--interactive.sh: git gc --auto &&
git-svn.perl:               command_noisy('gc', '--auto');

От git grep -- --auto на git.git эти результаты выглядели интересно. Известный является builtin/merge.c Это означает, что очень распространенный git pull должен вызвать git gc --auto,

Кроме того, если ваш "нетехнический" персонал не делает довольно "продвинутых" вещей (в этот момент они больше не будут "нетехническими"), я не понимаю, почему им когда-либо понадобится работать git gc вручную вместо того, чтобы просто git gc --auto справиться со всем

С Git 2.17 (Q2 2018) вам придется добавить git commit к списку команд, запускающих git gc --auto,
На самом деле, так должно было быть с самого начала Git.

См. Коммит 095c741 (28 февраля 2018 г.) Ævar Arnfjörð Bjarmason ( avar )
(Объединено Юнио С Хамано - gitster - в коммите 9bb8eb0, 08 марта 2018 г.)

commit: бежать git gc --auto как раз перед post-commit крюк

Изменить поведение git-commit вернуться к тому, что было в d4bb43e ("Invoke" git gc --auto " от commit, merge, am а также rebase.", 2007-09-05, Git v1.5.4-rc0), когда это было git-commit.sh,

Вскоре после этого в f5bbc32 ("Порт 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 ГБ, до того как был добавлен ежедневный cronjob " git gc ", уменьшив его до менее 1 ГБ. Это заставит такие случаи работать без вмешательства.

Я думаю, что исправление таких патологических случаев, когда хранилище будет расти вечно, является выгодным компромиссом за пару миллисекундных звонков " git gc --auto "(в тех случаях, когда ничего не происходит).

Другие вопросы по тегам