Принудительное удаленное репо для сжатия (GC) с помощью Git - PullRequest
10 голосов
/ 18 ноября 2010

Я использую Git для создания версий серии двоичных файлов.Они сжимаются довольно хорошо, но мои центральные репозитории, кажется, не сжимаются, когда я нажимаю на них.Они съедают приличную сумму моей квоты, поэтому я искал, есть ли способ заставить удаленное репо делать GC.

Возможно ли это?Я работаю над Project Locker , поэтому я не верю, что у меня есть SSH-доступ, чтобы самому войти и собрать репозиторий.Есть идеи?Спасибо.

Ответы [ 3 ]

8 голосов
/ 18 ноября 2010

Если вы не можете запустить git gc самостоятельно, вам придется заставить его работать автоматически.Тогда у вас не будет такого полного контроля над ним, но вы, по крайней мере, сможете запустить его.

git gc --auto запускается несколькими командами;соответствующий здесь - receive-pack, который запускается на пульте дистанционного управления для получения пакета как часть push.gc --auto перепаковывает только тогда, когда есть достаточно свободных предметов;отсечка определяется параметром config gc.auto и по умолчанию - 6700.

Если у вас есть доступ к gitconfig пульта дистанционного управления, вы можете временно установить для этого отсечения значение 1.В репо обязательно должен быть хотя бы один незакрепленный объект, так что gc --auto будет делать свое дело при следующем нажатии.

Если у вас нет доступа к gitconfig пульта, всеЯ могу подумать, чтобы сделать это искусственно создать кучу незакрепленных объектов.Вы можете сделать это, создав ветку, добавив к ней кучу крошечных файлов (с различным содержимым), отправив ветку на удаленный сервер, а затем удалив ветку с удаленного компьютера.(Важно изменить содержимое, иначе они будут использовать одни и те же капли.) Промойте и повторите.

2 голосов
/ 18 ноября 2010

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

1 голос
/ 18 ноября 2010

Форма git-gc Справочная страница :

Некоторые команды git могут автоматически запускать git gc; подробнее см. флаг --auto ниже.

и далее:

- авто

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

Уборка требуется, если в хранилище слишком много незакрепленных предметов или слишком много упаковок. Если количество свободных объектов превышает значение переменной конфигурации gc.auto, то все свободные объекты объединяются в один пакет с помощью git repack -d -l. Установка значения gc.auto в 0 отключает автоматическую упаковку незакрепленных предметов.

Если количество пакетов превышает значение gc.autopacklimit, то существующие пакеты (кроме отмеченных файлом .keep) объединяются в один пакет с помощью опции -A git repack. Установка gc.autopacklimit в 0 отключает автоматическую консолидацию пакетов.

И в итоге:

Команда git gc --auto запустит хук pre-auto-gc . См. Githooks (5) для получения дополнительной информации.

...