Как запустить сборку мусора в удаленном репозитории Git?


Как мы знаем, мы можем периодически запускать git gc, чтобы упаковать объекты под .git/objects.

В случае удаленного центрального репозитория Git (голого или нет), однако, после многих толчков, там много файлов под myproj.git/objects; каждый коммит, кажется, создает новый файл там.

Как я могу упаковать столько файлов? (Я имею в виду те, которые находятся в удаленном Центральном голом хранилище, а не в локальном хранилище клонов.)

4 46

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, чтобы очистить их.