Как часто следует использовать git-gc?
Как часто вы должны использовать git-gc?
The страница руководства просто говорит:
пользователям рекомендуется выполнять эту задачу на регулярной основе в каждом репозитории для поддержания хорошей загрузки дискового пространства и хорошей производительности работы.
есть ли какие-то команды, чтобы получить некоторые подсчеты объектов, чтобы узнать, пришло ли время gc?
9 ответов:
Это зависит в основном от того, сколько используется репозиторий. При регистрации одного пользователя один раз в день и операции ветвления/слияния/etc раз в неделю вам, вероятно, не нужно запускать его более одного раза в год.
с несколькими десятками разработчиков, работающих над несколькими десятками проектов, каждый из которых проверяет 2-3 раза в день, Вы можете запустить его ночью.
Это не повредит, чтобы запустить его чаще, чем это необходимо, хотя.
Что бы я сделал, это запустить его сейчас, а затем через неделю выполните измерение использования диска, запустите его снова и снова измерьте использование диска. Если он падает на 5% в размере, а затем запустить его один раз в неделю. Если он падает больше, а затем запустить его чаще. Если он падает меньше, то запустить его реже.
обратите внимание, что недостатком сбора мусора в вашем репозитории является то, что мусор собирается. Как мы все знаем, как пользователи компьютеров, файлы, которые мы считаем мусор прямо сейчас может оказаться очень ценным три дня в будущем. Тот факт, что git держит большую часть своего мусора вокруг, несколько раз спасал мой бекон – просматривая все висячие коммиты, я восстановил много работы, которую я случайно консервировал.
Так что не будьте слишком аккуратным уродом в своем личном клоны. В этом нет необходимости.
OTOH, значение восстанавливаемости данных сомнительно для РЕПО, используемых в основном в качестве пультов дистанционного управления, например. место, куда все разработчики нажимают и / или вытаскивают. Там, возможно, было бы разумно начать GC run и часто переупаковывать.
последние версии git запускают gc автоматически при необходимости, поэтому вам не нужно ничего делать. См. раздел Параметры man git-gc (1): "некоторые команды git запускают git gc -- auto после выполнения операций, которые могут создать много свободных объектов."
если вы используете Git-Gui, это говорит когда вы должны беспокоиться:
This repository currently has approximately 1500 loose objects.следующая команда принесет аналогичное число:
$ git count-objectsкроме, источник, git-gui будет делать математику сам по себе, фактически подсчитывая что-то в и, вероятно, приносит приближение (я не знаю
tclправильно читать!).в любом случае, это кажется чтобы дать предупреждение на основе произвольного числа вокруг 300 незакрепленные предметы.
Я использую git gc после того, как я делаю большую проверку, и у меня много нового объекта. это может сэкономить место. Например, если вы проверяете большой проект SVN с помощью git-svn и делаете git gc, вы обычно экономите много места
вы можете сделать это без каких-либо перерывов, с новой (Git 2.0 Q2 2014) настройки
gc.autodetach.посмотреть commit 4c4ac4d и commit 9f673f9 (Nguyễn Thái Ngọc Duy, он же pclouds):
gc --autoтребует времени и может временно заблокировать пользователя (но не менее раздражающе).
Запустить его в фоновом режиме на системах, которые его поддерживают.
Единственное, что потеряно с запуском в фоновом режиме это распечатки. Ноgc outputне очень интересно.
Вы можете сохранить его на переднем плане, изменивgc.autodetach.
С момента выпуска 2.0, была ошибка, хотя: git 2.7 (Q4 2015) обязательно не потерять сообщение об ошибке.
Смотрите совершить 329e6e8 (19 сентября 2015) by Nguyễn Thái Ngọc Duy (pclouds).
(слитый Junio C Hamano--gitster-- in commit 076c827, 15 окт 2015)
gc: сохранить журнал из демонизированногоgc --autoи распечатать его в следующий разпока commit 9f673f9 (
gc: параметр config для управлением--autoв фоновом режиме - 2014-02-08) помогает уменьшить жалобы о 'gc --auto' забивая терминал, он создает еще один набор проблем.последнее в этом наборе, в результате демонизации,
stderrзакрывается и все предупреждения теряются. Это предупреждение в концеcmd_gc()особенно важно, потому что он говорит пользователю, как избежать "gc --auto" работает несколько раз.
Поскольку stderr закрыт, пользователь не знает, естественно, они жалуются на 'gc --autoтеряем процессора.демонизированной
gcтеперь спасаетstderrдо$GIT_DIR/gc.log.
Послеgc --autoне будет бегать иgc.logраспечатывается до тех пор, пока пользователь не удалитgc.log.
эта цитата взята из; контроль версий с Git
Git запускает сборку мусора автоматически:
• Если в репозитории слишком много свободных объектов
• когда происходит толчок к удаленному репозиторию
• после некоторых команд, которые могут ввести много свободных объектов
• когда некоторые команды, такие как Git reflog истекает явно запросить его
и, наконец, сбор мусора происходит, когда вы явно запросить его с помощью команды git gc. Но когда это должно быть? Там нет твердого тела ответьте на этот вопрос, но есть несколько хороших советов и лучших практиковать.
вы должны рассмотреть возможность запуска git gc вручную в нескольких ситуации:
• Если вы только что завершили git filter-branch . Напомним, что фильтр-ветвь переписывает много коммитов, вводит новые и оставляет этот старые на ref, которые должны быть удалены, когда вы удовлетворены с результатами. Все эти мертвые объекты (которых больше нет ссылка, так как вы только что удалили одну ссылку, указывающую на них) должны быть удалены с помощью сборки мусора.
• после некоторых команд, которые могут ввести много свободных объектов. Этот например,могут быть большие усилия по перебазированию.
и на оборотной стороне, когда следует опасаться сбора мусора?
• Если есть потерянные ссылки, которые вы можете восстановить
• в контексте git rerere и вам не нужно сохранять резолюции навсегда
• в контексте только тегов и ветвей достаточно, чтобы вызвать Git, чтобы сохранить фиксацию навсегда
• в контексте извлечения FETCH_HEAD (URL-прямые извлечения через git fetch ), потому что они немедленно подвергаются сборке мусора
• в контекст только тегов и ветвей достаточно, чтобы вызвать Git, чтобы сохранить фиксацию навсегда
• в контексте извлечения FETCH_HEAD (URL-прямые извлечения через git fetch ), потому что они немедленно подвергаются сборке мусора
Я использую, когда я делаю большую фиксацию, прежде всего, когда я удаляю больше файлов из репозитория.. после, коммиты быстрее
Comments