Git 2.23 (Q3 2019): si vous souhaitez cloner et mettre à jour les sous-modules vers leur dernière révision:
git clone --recurse-submodules --remote-submodules
Si vous voulez simplement les cloner sur leur SHA1 enregistré:
git clone --recurse-submodules
Voir ci-dessous.
Réponse originale 2010
Comme le mentionne joschi dans les commentaires, git submoduleprend désormais en charge l' --recursiveoption (Git1.6.5 et plus).
Si --recursiveest spécifié, cette commande récursive dans les sous-modules enregistrés et mettra à jour tous les sous-modules imbriqués à l'intérieur.
Voir Utilisation récursive des sous-modules git pour la partie init.
Voir git submoduleexpliqué pour plus.
Avec la version 1.6.5 de git et versions ultérieures, vous pouvez le faire automatiquement en clonant le super-projet avec l' –-recursiveoption:
git clone --recursive git://github.com/mysociety/whatdotheyknow.git
Mise à jour 2016, avec git 2.8: voir " Comment accélérer / paralléliser les téléchargements de sous-modules git en utilisant git clone --recursive? "
Vous pouvez lancer la récupération du sous-module à l'aide de plusieurs threads, en parallèle.
Par exemple:
git fetch --recurse-submodules -j2
Encore mieux, avec Git 2.23 (Q3 2019), vous pouvez cloner et extraire le sous-module vers leur branche de suivi en une seule commande!
Voir commit 4c69101 (19 mai 2019) de Ben Avison ( bavison) .
(Fusionné par Junio C Hamano - gitster- dans commit 9476094 , 17 juin 2019)
clone: ajouter un --remote-submodulesindicateur
Lors de l'utilisation, git clone --recurse-submodulesil était auparavant impossible de passer un --remotecommutateur à la git submodule updatecommande implicite pour tout cas d'utilisation où vous souhaitez que les sous-modules soient extraits sur leur branche de suivi à distance plutôt qu'avec le SHA-1 enregistré dans le superprojet.
Ce patch corrige cette situation.
Il passe en fait --no-fetchà git submodule updateaussi bien sur le terrain , ils le sous - module vient seulement d' être clonés, donc aller chercher la télécommande seulement sert à nouveau ralentir les choses.
Cela signifie:
--[no-]remote-submodules:
Tous les sous-modules qui sont clonés utiliseront l'état de la branche de suivi à distance du sous-module pour mettre à jour le sous-module, plutôt que le SHA-1 enregistré du superprojet. Équivalent à passer --remoteà git submodule update.
git clone --recurse-submodules --remote-submodules(Q3 2019 Git 2.23): elle clonera et mettra à jour les sous-modules en une seule commande. Voir ma réponse modifiée ci-dessous .