Git 2.23 (Q3 2019): se vuoi clonare e aggiornare i sottomoduli alla loro ultima revisione:
git clone --recurse-submodules --remote-submodules
Se vuoi solo clonarli nel loro SHA1 registrato:
git clone --recurse-submodules
Vedi sotto.
Risposta originale 2010
Come menziona joschi nei commenti, git submoduleora supporta l' --recursiveopzione (Git1.6.5 e altro).
Se --recursivespecificato, questo comando ricercherà nei sottomoduli registrati e aggiornerà tutti i sottomoduli annidati all'interno.
Vedi Lavorare con i sottomoduli git in modo ricorsivo per la parte init.
Vedi git submodulespiegato di più.
Con la versione 1.6.5 di git e successive, puoi farlo automaticamente clonando il super-progetto con l' –-recursiveopzione:
git clone --recursive git://github.com/mysociety/whatdotheyknow.git
Aggiornamento 2016, con git 2.8: vedi " Come velocizzare / parallelizzare i download dei sottomoduli git usando git clone --recursive? "
È possibile avviare il recupero del sottomodulo utilizzando più thread, in parallelo.
Per esempio:
git fetch --recurse-submodules -j2
Ancora meglio, con Git 2.23 (3 ° trimestre 2019), puoi clonare ed effettuare il checkout del sottomodulo nel loro ramo di tracciamento in un solo comando!
Vedi commit 4c69101 (19 maggio 2019) di Ben Avison ( bavison) .
(Unito da Junio C Hamano - gitster- in commit 9476094 , 17 giugno 2019)
clone: aggiungi --remote-submodulesflag
Quando si utilizzava, in git clone --recurse-submodulesprecedenza non esisteva alcun modo per passare un --remotepassaggio al git submodule updatecomando implicito per qualsiasi caso d'uso in cui si desidera eseguire il checkout dei sottomoduli sul ramo di tracciamento remoto anziché con SHA-1 registrato nel superprogetto.
Questa patch corregge questa situazione.
In realtà passa --no-fetchper git submodule updatecosì per i motivi che sottomodulo è appena stato clonato, così recupero dal telecomando nuovamente serve solo a rallentare le cose.
Questo significa:
--[no-]remote-submodules:
Tutti i sottomoduli che vengono clonati useranno lo stato del ramo di tracciamento remoto del sottomodulo per aggiornare il sottomodulo, piuttosto che lo SHA-1 registrato del superprogetto. Equivale a passare --remotea git submodule update.
git clone --recurse-submodules --remote-submodules(Q3 2019 Git 2.23): clonerà e aggiornerà i sottomoduli in un solo comando. Vedi la mia risposta modificata di seguito .