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