Comment "git clone" y compris les sous-modules?

j'essaie de mettre un sous-module dans un repo.

le problème est que lorsque je clone le dossier parent repo, le dossier submodule est entièrement vide.

y a-t-il un moyen de faire en sorte que 'git clone parent' mette réellement des données dans le dossier submodule?

exemple: http://github.com/cwolves/sequelize/tree/master/lib/

nodejs-mysql-native désigne un git externe, mais quand je vérifie le projet sequelize , ce dossier est vide...

1524
demandé sur Mathias Bynens 2010-09-26 11:13:25

10 réponses

avec la version 2.13 de Git et plus tard, --recursive a été déprécié et --recurse-submodules devrait être utilisé à la place:

git clone --recurse-submodules -j8 git://github.com/foo/bar.git
cd bar

note de L'éditeur: -j8 est une optimisation optionnelle des performances qui est devenue disponible dans la version 2.8, et récupère jusqu'à 8 sous - modules à la fois en parallèle-voir man git-clone .

avec la version 1.9 de Git jusqu'à la version 2.12 (drapeau -j disponible uniquement dans la version 2.8+):

git clone --recursive -j8 git://github.com/foo/bar.git
cd bar

avec la version 1.6.5 de Git et plus tard, vous pouvez utiliser:

git clone --recursive git://github.com/foo/bar.git
cd bar

pour les repos déjà clonés, ou des versions plus anciennes de Git, utiliser:

git clone git://github.com/foo/bar.git
cd bar
git submodule update --init --recursive
2398
répondu Mathias Bynens 2018-03-08 23:58:41

vous devez faire deux choses avant qu'un sous-module ne soit rempli:

git submodule init 
git submodule update
374
répondu LiraNuna 2010-09-26 07:19:04

réponse originale 2010

comme joschi mentions dans les commentaires, git submodule supporte maintenant l'option --recursive (Git1.6.5 et plus).

si --recursive est spécifié, cette commande se retrouvera dans les sous-modules enregistrés, et mettra à jour tous les sous-modules imbriqués à l'intérieur.

Voir avec Git submodules récursivement pour la partie init.

Voir git submodule expliqué pour plus.

avec la version 1.6.5 de git et plus tard, vous pouvez le faire automatiquement en clonant le super-projet avec l'option –-recursive :

git clone --recursive git://github.com/mysociety/whatdotheyknow.git

mise à jour 2016, avec git 2.8: voir " Comment faire accélérer / paralléliser les téléchargements de sous-modules git en utilisant git clone --recursive ? "

vous pouvez initier la récupération du sous-module en utilisant plusieurs threads, en parallèle.

Pour les instances:

git fetch --recurse-submodules -j2
145
répondu VonC 2017-05-23 11:55:01

vous pouvez utiliser cette commande pour cloner votre repo avec tous les sous-modules:

git clone --recursive YOUR-GIT-REPO-URL

Ou si vous avez déjà cloné le projet, vous pouvez utiliser:

git submodule init
git submodule update
42
répondu Javier C. 2017-10-16 15:47:26

Si votre sous-module a été ajouté dans une branche assurez-vous d'inclure dans votre commande clone...

git clone -b <branch_name> --recursive <remote> <directory>
28
répondu Mars Redwyne 2012-03-07 22:28:58

essayez ceci:

git clone --recurse-submodules

Il tire automatiquement dans les données de sous-module en supposant que vous avez déjà ajouté les sous-modules au projet parent.

22
répondu nweiler 2013-01-16 18:39:31

réponse tardive

// git CLONE INCLUDE-SUBMODULES ADDRESS DESTINATION-DIRECTORY
git clone --recursive https://USERNAME@bitbucket.org/USERNAME/REPO.git DESTINATION_DIR

comme je viens de passer une heure entière à tripoter un ami: Même si vous avez des droits D'administrateur sur BitBucket, clonez toujours le dépôt ORIGINAL et utilisez le mot de passe de celui qui possède la pension. Ennuyeux de découvrir que vous avez couru dans ce minetrap :p

17
répondu kaiser 2013-02-16 16:10:25

essayez ceci pour inclure des sous-modules dans le dépôt git.

git clone -b <branch_name> --recursive <remote> <directory>

ou

git clone --recurse-submodules
13
répondu radhey shyam 2018-06-18 08:31:21

Submodules parallel fetch vise à réduire le temps requis pour récupérer un dépôt et tous ses sous-modules connexes en permettant la récupération de plusieurs dépôts à la fois. Ceci peut être accompli en utilisant l'option new --jobs, par exemple:

git fetch --recurse-submodules --jobs=4

selon l'équipe Git, cela peut considérablement accélérer la mise à jour des dépôts qui contiennent de nombreux sous-modules. Lors de l'utilisation de --recurse-submodules sans l'option new --jobs, Git va fetch submodules one par un.

Source: http://www.infoq.com/news/2016/03/git28-released

8
répondu Long Nguyen 2016-10-07 19:53:14

essayez ceci.

git clone -b <branch_name> --recursive <remote> <directory>

Si vous avez ajouté le sous-module dans une branche assurez-vous que vous l'ajouter à la commande clone.

1
répondu Himeshika96 2018-06-18 08:30:38