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): она будет клонировать и обновлять подмодули в одной команде. Смотрите мой отредактированный ответ ниже .