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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

Форма 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 hook. Подробнее см. Githooks (5).