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 рекурсивно для частини init.
Див git submoduleпояснені більш.
З версією 1.6.5 git і пізнішої версії ви можете це зробити автоматично, клонувавши суперпроект з –-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) .
(Об'єднано Хуніо С Хамано - 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): вона буде клонувати та оновлювати підмодулі в одній команді. Дивіться мою відредаговану відповідь нижче .