Общие сведения. У меня возникла вложенная проблема для одного из наших репозиториев, удаленно размещенного в версии GitHub для предприятий, которую использует моя компания.
Я думаю, что самый простой способ справиться с этим, учитывая, сколько лет репозиторию, — это каким-то образом удалить старые жестко зафиксированные файлы, которые никогда не должны были быть зафиксированы в первую очередь, которые предположительно хранятся где-то либо напрямую, либо по ссылке. Хитрость в том, что я не хочу возиться с историей, если это может помочь, и я мало знаю о более продвинутых функциях git, поэтому трудно даже понять, какой правильный вопрос. просить.
Проблема: репозиторий занимает слишком много времени для извлечения/извлечения через Jenkins через подключаемый модуль GitSCM. Время ожидания истекает примерно через 10 минут. В этом репозитории есть тысячи коммитов и десятки тегов, которые нужно отслеживать, поэтому я не могу произвольно установить определенный коммит как хорошую точку для начала и обрезать остальные.
Мои выводы: Попытка сделать то, что, кажется, делает подключаемый модуль GitSCM, не приводит ни к каким проблемам или временным затратам. Тем не менее, он по-прежнему невероятно медленный, просто не более 10 минут, поэтому нам, вероятно, следует почистить это, даже если плагин вызывает усугубление проблем с производительностью.
Возможные оптимизации: я обнаружил, что несколько коммитов были добавлены в основном DLL. С тех пор эти библиотеки DLL были удалены с помощью новых коммитов. Однако размер репо по-прежнему составляет сотни мегабайт по сравнению с тем, что фактически используется локальной файловой системой. Прямо сейчас главная ветвь занимает около 4 МБ вне папки .git
, что составляет около 300 МБ.
Цель: избавиться от как можно большей части этих 300 МБ, не раздражая людей потерей истории/тегов.
Я пробовал множество решений из возможных связанных проблем, но мне не удалось получить его, когда удаленное размещенное репо уменьшено до чего-то более близкого к фактическому размеру, используемому файловой системой. Некоторые из этих вопросов были,
Уменьшить размер репозитория git
Как удалить неиспользуемые объекты из репозитория git?
Почему git больше не уменьшает размер репозитория?
Попробовав решения этих вопросов, я в итоге только увеличил размер репо, а не уменьшил его, о чем, честно говоря, меня предупредили в одном из ответов на эти вопросы.
Учитывая предысторию этой проблемы, детали проблемы и ранее упомянутые вопросы, можно ли выполнить то, что я пытаюсь сделать в удаленном репозитории, и если да, то что конкретно я должен запустить или попросить наших администраторов GHE запустить если я лично не могу сделать обновление?
В итоге это привело к росту:
git reflog expire --all --expire=now
git gc --prune=now --aggressive
git filter-branch --index-filter "git rm --cached --ignore-unmatch *.dll" --prune-empty -- --all
git push origin master
Однако после выполнения первых двух команд размер папки .git уменьшился только на 40 МБ; далеко не то, на что я надеялся, поэтому я попробовал следующую команду в последовательности, которая при удаленном нажатии вызывала рост репо, а не его сжатие. Количество объектов увеличилось с 45 до 60 тысяч.