У меня есть репо суперпроекта с количеством подмодулей.
множество файлов в Git LFS.
Репо поставляется с несколькими долгоживущими ветвями релиза.
Проблема
Полный клон передает 20 ГБ объектов Git и Git LFS.
Checkout of master снижает общий объем репо до 40 ГБ,
это объекты и файлы рабочего дерева вместе.
Давайте рассмотрим три отдельных клона как канонический способ создания
три рабочих экземпляра, по одному на долгоживущий филиал:
git clone --branch master --recursive --jobs 8 https://repo repo_master
git clone --branch release/1.0 --recursive --jobs 8 https://repo repo_release1
git clone --branch release/2.0 --recursive --jobs 8 https://repo repo_release2
Я пытаюсь разработать оптимизированный для сети эквивалент вышеупомянутого:
- клонировать один раз с проверенным мастером по умолчанию
- сделать несколько копий клонированного репо
- оформить выпуск веток
Вопросы
Как извлечь существующую ветку, извлеченную из удаленного,
удалить предыдущую ветку и очистить все остатки?
Как убрать все что связано с ранее выписанным
master и его рабочее дерево, любые кешированные предыдущие загрузки LFS и т. д.?
Но, чтобы сохранить историю происхождения / мастера.
Решение Прототип
Вот что я придумал для оптимизированного для сети рабочего процесса:
git clone --branch master --recursive --jobs 8 https://repo repo_master
cp -a repo_master repo_release1
cp -a repo_master repo_release2
cd repo_release1
git checkout -b release/1.0 --track origin/release/1.0
git pull
git submodule update --init --recursive --jobs 8
git branch -D master
git lfs prune
git submodule foreach --recursive git lfs prune
git lfs checkout
git submodule foreach --recursive git lfs checkout
Вопросы к прототипу
Выглядит ли это правильно или какие-либо шаги отсутствуют / избыточны?
Имеет ли смысл запускать какие-либо из них, в какой момент?
git gc --aggressive --prune=now
git submodule foreach --recursive git gc --aggressive --prune=now
Пожалуйста, примите во внимание, что между
git clone --branch master ...
и cp -a repo_master ...
.
( Проблема также была опубликована в Git Ling рассылки и Git LFS на GitHub )