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