Принудительное удаленное копирование для сжатия (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).