Список всех команд, вызывающих git gc --auto - PullRequest
17 голосов
/ 28 февраля 2011

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

- auto

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

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 28 февраля 2011
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.

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

1 голос
/ 11 марта 2018

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

См. коммит 095c741 (28 февраля 2018 г.) от Ævar Arnfjörð Bjarmason (avar) .
(Объединено с Junio ​​C Hamano - 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 ("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 ГБ, прежде чем был добавлен ежедневный cronjob до "git gc", уменьшив его до менее 1 ГБ. Это сделает такой дела работают без вмешательства.

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

...