Git 2.23 (III kwartał 2019): jeśli chcesz sklonować i zaktualizować submoduły do ich najnowszej wersji:
git clone --recurse-submodules --remote-submodules
Jeśli chcesz je tylko sklonować na nagranym SHA1:
git clone --recurse-submodules
Patrz poniżej.
Oryginalna odpowiedź 2010
Jak joschi wspomina w komentarzach, git submoduleobsługuje teraz --recursiveopcję (Git1.6.5 i więcej).
Jeśli --recursivejest określony, to polecenie będzie się powtarzało w zarejestrowanych podmodułach i aktualizuje wszystkie zagnieżdżone podmoduły w nim.
Zobacz Praca rekurencyjnie z podmodułami git dla części początkowej.
Zobacz git submodulewyjaśnienie, aby uzyskać więcej.
W wersji 1.6.5 git i nowszych możesz to zrobić automatycznie, klonując super-projekt z –-recursiveopcją:
git clone --recursive git://github.com/mysociety/whatdotheyknow.git
Aktualizacja 2016 z git 2.8: patrz „ Jak przyspieszyć / zrównoleglić pobieranie podmodułów git za pomocą git clone --recursive? ”
Możesz zainicjować pobieranie submodułu przy użyciu wielu wątków równolegle.
Na przykład:
git fetch --recurse-submodules -j2
Co więcej, dzięki Git 2.23 (III kwartał 2019 r.) Możesz klonować i pobierać moduły podrzędne do ich gałęzi śledzenia za pomocą jednego polecenia!
Zobacz zatwierdzenie 4c69101 (19 maja 2019 r.), Autor: Ben Avison ( bavison) .
(Połączone przez Junio C Hamano - gitster- w commit 9476094 , 17 czerwca 2019)
clone: dodaj --remote-submodulesflagę
Podczas używania git clone --recurse-submoduleswcześniej nie było możliwości przekazania --remoteprzełącznika do domyślnej git submodule updatekomendy dla dowolnego przypadku użycia, w którym chcesz, aby submoduły były sprawdzane w ich gałęzi zdalnego śledzenia, a nie z SHA-1 zarejestrowanym w superprojekcie.
Ta poprawka naprawia tę sytuację.
To faktycznie przechodzi --no-fetchsię git submodule updatetakże na gruncie one modułem dopiero sklonowano, więc ściągam z pilota ponownie służy jedynie spowolnić.
To znaczy:
--[no-]remote-submodules:
Wszystkie sklonowane submoduły będą używać statusu gałęzi zdalnego śledzenia submodułu do aktualizacji submodułu, a nie zarejestrowanego SHA-1 superprojektu. Odpowiednik przejścia --remotedo git submodule update.
git clone --recurse-submodules --remote-submodules(G3 2.23): sklonuje i zaktualizuje submoduły w jednym poleceniu. Zobacz moją zredagowaną odpowiedź poniżej .