Список всех команд, вызывающих 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
"(в тех случаях, когда ничего не происходит).