Git 2.23 (Q3 2019): если вы хотите клонировать и обновить подмодули до последней версии:
git clone --recurse-submodules --remote-submodules
Если вы просто хотите клонировать их на записанном SHA1:
git clone --recurse-submodules
См. ниже.
Оригинальный ответ 2010
Как упоминает joschi в комментариях, git submoduleтеперь поддерживает эту --recursiveопцию (Git1.6.5 и более).
Если --recursiveуказано, эта команда будет входить в зарегистрированные подмодули и обновлять все вложенные подмодули внутри.
См. Работа с субмодулями git рекурсивно для части инициализации.
Смотрите git submoduleобъяснил больше.
В git версии 1.6.5 и выше вы можете делать это автоматически, клонируя супер-проект с –-recursiveопцией:
git clone --recursive git://github.com/mysociety/whatdotheyknow.git
Обновление 2016 года с git 2.8: см. « Как ускорить / распараллелить загрузку подмодулей git с помощью git clone --recursive? »
Вы можете начать выборку подмодуля, используя несколько потоков, параллельно.
Например:
git fetch --recurse-submodules -j2
Более того, с Git 2.23 (Q3 2019) вы можете клонировать и извлекать субмодуль в их ветку трекинга одной командой!
См. Коммит 4c69101 (19 мая 2019 г.) Бен Ависона ( bavison) .
(Слиты Junio C Hamano - gitster- в фиксации 9476094 , 17 июн 2019)
clone: добавить --remote-submodulesфлаг
При использовании git clone --recurse-submodulesранее не было никакого способа передать --remoteпереключатель неявной git submodule updateкоманде для любого случая использования, когда вы хотите, чтобы субмодули были проверены в их ветви удаленного отслеживания, а не с SHA-1, записанным в суперпроекте.
Этот патч исправляет эту ситуацию.
Это на самом деле проходит --no-fetchв git submodule updateа на том основании , что они подмодуль только что был клонирован, поэтому выборка из удаленного снова служит только замедлить ход событий.
Это значит:
--[no-]remote-submodules:
Все клонированные субмодули будут использовать состояние ветви удаленного отслеживания субмодуля для обновления субмодуля, а не записанного SHA-1 суперпроекта. Эквивалентно переходу --remoteна git submodule update.
git clone --recurse-submodules --remote-submodules(Q3 2019 Git 2.23): она будет клонировать и обновлять подмодули в одной команде. Смотрите мой отредактированный ответ ниже .