Как запустить сборку мусора в удаленном репозитории Git?
Как мы знаем, мы можем периодически запускать git gc
, чтобы упаковать объекты под .git/objects
.
В случае удаленного центрального репозитория Git (голого или нет), однако, после многих толчков, там много файлов под myproj.git/objects
; каждый коммит, кажется, создает новый файл там.
Как я могу упаковать столько файлов? (Я имею в виду те, которые находятся в удаленном Центральном голом хранилище, а не в локальном хранилище клонов.)
4 ответа:
Удаленное РЕПО должно быть настроено на запуск gc по мере необходимости после фиксации. Смотрите документацию ГК.авто в Git-gc и git-config man-страницах.
Однако удаленное РЕПО не должно требовать такой большой сборки мусора, так как оно редко будет иметь висячие (недостижимые) коммиты. Это обычно происходит из-за таких вещей, как удаление ветвей и перебазирование, которые обычно происходят только в локальных РЕПО.
Таким образом, gc требуется больше для переупаковки, а именно для экономии места для хранения. чем удаление фактического мусора. Сборщик мусора.автоматическая переменная достаточна для того, чтобы позаботиться об этом.
В то время как у вас должен быть какой-то процесс, который заботится об этом периодически, автоматически, это не проблема запустить
git gc
На голом репозитории
git@domU:/pix/git/repositories/abd.git$ ls -l total 28 drwxrwxr-x 2 git git 6 2010-06-06 02:44 branches -rw-rw-r-- 1 git git 66 2010-06-06 02:44 config -rw-r--r-- 1 git git 23 2011-03-15 18:19 description -rw-rw-r-- 1 git git 23 2010-06-06 02:44 HEAD drwxrwxr-x 2 git git 4096 2010-06-06 02:44 hooks drwxrwxr-x 2 git git 20 2010-06-06 02:44 info drwxrwxr-x 260 git git 8192 2010-09-01 00:26 objects drwxrwxr-x 4 git git 29 2010-06-06 02:44 refs $ git gc Counting objects: 3833, done. Compressing objects: 31% (1085/3500)...
Этот вопрос должен пролить некоторый свет на то, как часто вы должны запускать сборку мусора.
Самым простым вариантом было бы использовать запланированную задачу в windows или задание cron в Unix для периодического запуска
git gc
. Таким образом, вам даже не нужно думать об этом.
После многих толчков, там много файлов под
myproj.git/objects
Там не будет так много с git 2.11+ (Q4 2016) и предварительно получить крюк.
В этом случае вам не нужно будет запускатьgit gc
вообще .См совершить 62fe0eb, совершать e34c2e0, совершать 722ff7f, совершать 2564d99, совершать 526f108 (03 октября 2016 года) по Джефф Кинг (
peff
).
(объединено Junio C Hamano --gitster
-- in commit 25ab004 , 17 Oct 2016)
receive-pack
: карантин объектов до тех пор, пока pre-receive не приметДля того, чтобы принимающая сторона "git push" проверила полученную историю и приняла решение отклонить push, объекты, отправленные с отправляющей стороны, должны быть доступны крюку и механизму проверки связности, и это традиционно делалось путем хранения объектов в принимающем репозитории и позволения"
git gc
" истекать.Вместо этого сохраните вновь полученные объекты во временной области и сделайте их доступными, повторно используя механизм альтернативного хранения объектов для них только в то время, когда мы решите, принимаем ли мы проверку, и как только мы решим, либо перенесите их в хранилище, либо немедленно очистите их.
Эта временная область будет задана новой переменной окружения
GIT_QUARANTINE_ENVIRONMENT
.Таким образом, если (большой) толчок отклоняется крюком
pre-receive
, Эти большие объекты не будут лежать в течение 90 дней ожиданиеgit gc
, чтобы очистить их.