Как часто вы должны использовать git -gc?

Как часто вы должны использовать git -gc?

справочная страница просто говорит:

Пользователям рекомендуется регулярно запускать эту задачу в каждом репозитории, чтобы поддерживать хорошее использование дискового пространства и хорошую производительность.

Есть ли какие-то команды, чтобы получить некоторые подсчеты объектов, чтобы узнать, не настало ли время gc?

Ответ 1

В основном зависит от того, сколько используется репозиторий. Когда один пользователь проверяет один раз в день и операцию branch/merge/etc раз в неделю, вам, вероятно, не нужно запускать его более одного раза в год.

С несколькими десятками разработчиков, работающих по нескольким десяткам проектов, каждый из которых проверяется 2-3 раза в день, вы можете запустить его в ночное время.

Не будет больно запускать его чаще, чем нужно.

Что бы я сделал, это запустить его сейчас, а через неделю провести измерение использования диска, запустить его снова и снова использовать диск. Если он уменьшится на 5%, запустите его один раз в неделю. Если оно больше, а затем запускайте его чаще. Если он меньше, а затем запускайте его реже.

Ответ 2

Обратите внимание, что недостатком сбора мусора в вашем репозитории является то, что мусор собирает. Как мы все знаем, как пользователи компьютеров, файлы, которые мы считаем мусором прямо сейчас, могут оказаться очень ценными в течение трех дней в будущем. Тот факт, что git хранит большую часть обломков вокруг, несколько раз спас мой бекон - просмотрев все оборванные коммиты, я восстановил много работы, которую я случайно запустил.

Так что не будьте слишком аккуратным уродцем в ваших частных клонах. Тебе мало нужно для этого.

OTOH, ценность восстановления данных сомнительна для репозиториев, используемых главным образом в качестве пультов, например. место, куда все разработчики нажимают и/или тянут. Там может быть разумно запускать GC-сессию и часто переупаковывать.

Ответ 3

Последние версии git автоматически запускают gc, поэтому вам не нужно ничего делать. См. Раздел "Параметры" man git -gc (1): "Некоторые команды git запускают git gc -auto после выполнения операции, которые могли бы создать много свободных объектов."

Ответ 4

Если вы используете Git -Gui, сообщает вам, когда вам следует беспокоиться:

This repository currently has approximately 1500 loose objects.

Следующая команда приведет к аналогичному номеру:

$ git count-objects

За исключением из своего источника, git -gui выполнит математику самостоятельно, фактически подсчитав что-то в папке .git/objects и вероятно, приближает (я не знаю, tcl, чтобы правильно прочитать это!).

В любом случае, кажется, чтобы дать предупреждение, основанное на произвольном количестве около 300 свободных объектов.

Ответ 5

Отбросьте его в задание cron, которое выполняется каждую ночь (днем?), когда вы спите.

Ответ 6

Я использую git gc после того, как сделаю большую проверку и у вас много нового объекта. он может сэкономить место. Например. если вы проверите большой проект SVN с помощью git -svn и выполните git gc, вы обычно сэкономите много места

Ответ 7

Вы можете сделать это без перерыва, с новой (Git 2.0 Q2 2014) настройкой gc.autodetach.

Смотрите commit 4c4ac4d и commit 9f673f9 (Нгуен Тай Нгок Дуй, он же pclouds):

gc --auto занимает много времени и может временно блокировать пользователя (но не менее раздражающе).
Заставьте его работать в фоновом режиме на системах, которые его поддерживают.
Единственное, что теряется при работе в фоновом режиме, это распечатки. Но gc output не очень интересен.
Вы можете сохранить его на переднем плане, изменив gc.autodetach.


Начиная с этого выпуска 2.0, была ошибка: git 2.7 (четвертый квартал 2015 года) не потеряет сообщение об ошибке.
См. коммит 329e6e8 (19 сентября 2015 г.) Нгуен Тай Нгок Дуй (pclouds).
(Merged by Junio C Hamano -- [TG45] -- in commit 076c827, 15 Oct 2015)

gc: сохранить журнал из демонизированного gc --auto и распечатать его в следующий раз

Хотя commit 9f673f9 (gc: опция конфигурации для запуска --auto в фоновом режиме - 2014-02-08) помогает уменьшить некоторые жалобы по поводу "gc --auto" зависания терминала, это создает еще одну проблему.

Последнее в этом наборе, в результате демонизации, stderr закрывается, и все предупреждения теряются. Это предупреждение в конце cmd_gc() особенно важно, потому что оно говорит пользователю, как избежать повторного запуска "gc --auto".
Поскольку stderr закрыт, пользователь не знает, естественно, они жалуются на "gc --auto" трату CPU.

Демонизированный gc теперь сохраняет stderr в $GIT_DIR/gc.log.
После этого gc --auto не будет запущен, а gc.log распечатан, пока пользователь не удалит gc.log
.

Ответ 8

Эта цитата взята из; Контроль версий с помощью Git

Git runs garbage collection automatically:

• Если в хранилище слишком много незакрепленных объектов

• Когда происходит отправка в удаленный репозиторий

• После некоторых команд, которые могут ввести много свободных объектов

• Когда срок действия некоторых команд, таких как git reflog, истекает, они явно запрашивают его

И, наконец, сборка мусора происходит, когда вы явно запрашиваете его используя команду git gc. Но когда это должно быть? Там нет твердого ответьте на этот вопрос, но есть несколько хороших советов и лучших практика.

Вы должны рассмотреть возможность запуска git gc вручную через несколько ситуации:

• Если вы только что завершили ветку git filter. Напомним, что ветвь фильтра переписывает много коммитов, вводит новые и оставляет старые на реф, которые должны быть удалены, когда вы удовлетворены с результатами. Все эти мертвые объекты (которые больше не являются ссылка, так как вы только что удалили одну ссылку, указывающую на них) должен быть удален с помощью сборки мусора.

• После некоторых команд, которые могут ввести много незакрепленных объектов. Этот например, может потребоваться большая перебазировка.

И с другой стороны,  когда стоит опасаться за сборку мусора?

• Если есть осиротевшие рефери, которых вы можете восстановить

• В контексте git rerere и вам не нужно сохранять решения навсегда

• В контексте только тегов и ветвей достаточно, чтобы вызвать Git, чтобы сохранить коммит навсегда

• В контексте поиска FETCH_HEAD (прямой URL-адрес через git fetch) потому что они сразу подлежат сборке мусора

Ответ 9

Я использую, когда делаю большой коммит, прежде всего, когда я удаляю больше файлов из репозитория. После этого коммиты быстрее