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