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

Другие вопросы по тегам