Принудительное удаленное репо для сжатия (GC) с помощью Git

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

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

3 ответа

Решение

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

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

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

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

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

Форма 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) для получения дополнительной информации.

Другие вопросы по тегам