Git субмодуль без лишнего веса
Я еще не мастер Git, столкнулся с проблемой, которую я не могу понять, как исправить. У меня есть репо с моим пользовательским скелетом WordPress, и я добавил WordPress в качестве подмодуля из его исходного репо git submodule add wp_repo_url
, Когда я клонирую репо на локальную машину с помощью:
git clone --recursive https://github.com/user/repo local_dir
он загружает субмодуль WP, как и ожидалось, но вот проблема - реальные файлы только 20,7 МБ, и в .git/modules/core/objects/pack
У меня есть огромный 124-мегабайтный файл.pack, который, я полагаю, похож на историю коммитов / ревизий этого подмодуля.
Как я могу повторно добавить субмодуль или модифицировать во время клонирования, чтобы предотвратить загрузку этого дополнительного веса?
ОБНОВИТЬ:
С помощью @iclmam я создал следующую настройку:
- мой скелет репо будет иметь WordPress в качестве подмодуля, весь репо с историей
- при создании нового проекта из скелета я буду клонировать его без опции --recursive, чтобы получить только основные файлы и пустую папку для подмодуля
- Если мне нужен WordPress с полной историей - например, если мне нужно переключаться между различными ветками / тегами WP, чтобы проверить обратную совместимость моего плагина / темы - тогда я получу этот подмодуль с полной историей
если мне просто нужна простая чистая установка последней версии WP, я перейду в каталог wp и пойду по-старому:
curl -L -O http://wordpress.org/latest.zip unzip latest.zip mv wordpress/* . rm latest.zip rm -rf wordpress
Не идеальное решение (я хотел максимально автоматизировать все), но пока оно работает.
Любые советы по оригинальному вопросу приветствуются.
2 ответа
Начиная с Git 2.10+ (3 квартал 2016 года), вы сможете делать обычные клоны... и при этом использовать мелкие клоны для субмодулей.
Все, что вам нужно сделать, это записать эту конфигурацию в свой .gitmodules
:
git config -f .gitmodules submodule.<name>.shallow true
Добавить, зафиксировать и нажать: любой, кто клонирует ваш репо (обычный клон, полная история), получит только 1 глубину для субмодуля <name>
,
Смотрите коммит f6fb30a, коммит abed000 и коммит 37f52e9 (3 августа 2016 г.) от Stefan Beller ( stefanbeller
)
(Объединено Юнио С Хамано - gitster
- в коммите dc7e09a, 08 августа 2016 г.)
> submodule update
: учить --[no-]recommend-shallow
вариант
Иногда история подмодуля не считается важной в проектах вверх по течению. Чтобы облегчить работу нижестоящих пользователей, разрешите логическое поле '
submodule.<name>.shallow
' в.gitmodules
, который может быть использован, чтобы рекомендовать, считает ли восходящий поток истории важным.Это поле учитывается в исходном клоне по умолчанию, его можно игнорировать, задав
--no-recommend-shallow
вариант.
Если вы используете WP в качестве подмодуля, это означает, что вам, вероятно, потребуется доступ к истории внутри этого подмодуля. Это означает, что вам нужен этот файл пакета.
Git упаковывает данные в файлы пакетов. Это для эффективности и экономии места на диске. Смотрите Git internal - Packfiles. Если вам интересно, что находится в пакете, вы можете использовать команду git verify -pack. При использовании опции -v вы можете обнаружить, что в ваш репозиторий был помещен огромный файл.
Если по каким-то причинам вы хотите "очистить" подмодуль, я бы предложил вам прочитать " Почему мой репо такой большой?
Если вам не нужна полная история в подмодуле, вы можете попробовать клонировать ее с помощью опции -depth (см. Команду git submodule), чтобы это был мелкий клон с усеченной историей. Это может уменьшить размер папки пакета.
1) клонировать основной репо без опции рекурсии
2) внутри основного репо инициализируйте подмодуль с помощью команды git submodule с опцией -depth