Git 2.23 (terceiro trimestre de 2019): se você deseja clonar e atualizar os submódulos para a revisão mais recente:
git clone --recurse-submodules --remote-submodules
Se você apenas deseja cloná-los no SHA1 gravado:
git clone --recurse-submodules
Ver abaixo.
Resposta original 2010
Como joschi menciona nos comentários, git submoduleagora suporta a --recursiveopção (Git1.6.5 e mais).
Se --recursivefor especificado, esse comando recursará nos submódulos registrados e atualizará todos os submódulos aninhados.
Consulte Trabalhando com submódulos git recursivamente para a parte init.
Veja git submoduleexplicado para mais.
Com a versão 1.6.5 do git e posterior, você pode fazer isso automaticamente clonando o superprojeto com a –-recursiveopção:
git clone --recursive git://github.com/mysociety/whatdotheyknow.git
Atualização 2016, com git 2.8: consulte " Como acelerar / paralelizar downloads de submódulos git usando git clone --recursive? "
Você pode iniciar a busca do submódulo usando vários threads, em paralelo.
Para instâncias:
git fetch --recurse-submodules -j2
Melhor ainda, com o Git 2.23 (terceiro trimestre de 2019), você pode clonar e fazer check-out do submódulo para sua ramificação de rastreamento em um comando!
Veja commit 4c69101 (19 de maio de 2019) de Ben Avison ( bavison) .
(Incorporado por Junio C Hamano - gitster- in commit 9476094 , 17 jun 2019)
clone: adicionar --remote-submodulessinalizador
Ao usar git clone --recurse-submodules, anteriormente, não havia maneira de passar uma --remoteopção para o git submodule updatecomando implícito para qualquer caso de uso em que você deseja que os submódulos sejam retirados em sua ramificação de rastreamento remoto, em vez de com o SHA-1 registrado no superprojeto.
Este patch corrige essa situação.
Na verdade, ele também passa --no-fetchcom git submodule updateo argumento de que o submódulo acabou de ser clonado, portanto, buscar no controle remoto novamente serve apenas para desacelerar as coisas.
Que significa:
--[no-]remote-submodules:
Todos os submódulos clonados usarão o status da ramificação de rastreamento remoto do submódulo para atualizar o submódulo, em vez do SHA-1 registrado do superprojeto. Equivalente a passar --remotepara git submodule update.
git clone --recurse-submodules --remote-submodules(Q3 2019 Git 2.23): clonará e atualizará os submódulos em um comando. Veja minha resposta editada abaixo .