J'essaie de mettre un sous-module dans un repo. Le problème est que lorsque je clone le référentiel parent, le dossier du sous-module est entièrement vide.
Est-il possible de faire en sorte que git clone parent_repo
place les données dans le dossier du sous-module?
Par exemple, http://github.com/cwolves/sequelize/tree/master/lib/ , nodejs-mysql-native
pointe vers un sous-module git externe, mais lors de l'extraction de la sequelize
projet, ce dossier est vide.
Avec la version 2.13 de Git et les versions ultérieures, --recurse-submodules
peut être utilisé à la place de --recursive
:
git clone --recurse-submodules -j8 git://github.com/foo/bar.git
cd bar
Note de l’éditeur: -j8
est une optimisation des performances optionnelle, disponible dans la version 2.8 et permettant d’extraire 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
uniquement disponible à partir de 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 les versions ultérieures, vous pouvez utiliser:
git clone --recursive git://github.com/foo/bar.git
cd bar
Pour les dépôts déjà clonés ou les anciennes versions de Git, utilisez:
git clone git://github.com/foo/bar.git
cd bar
git submodule update --init --recursive
Vous devez faire deux choses avant qu'un sous-module ne soit rempli:
git submodule init
git submodule update
Git 2.23 (T3 2019): si vous voulez cloner et mettre à jour les sous-modules avec leur dernière révision:
_git clone --recurse-submodules --remote-submodules
_
Si vous voulez juste les cloner à leur SHA1 enregistré:
_git clone --recurse-submodules
_
Voir ci-dessous.
Réponse originale 2010
Comme joschi mentionne dans les commentaires, git submodule
supporte maintenant le _--recursive
_ option (Git 1.6.5 et plus).
Si _
--recursive
_ est spécifié, cette commande sera renvoyée dans les sous-modules enregistrés et mettra à jour tous les sous-modules imbriqués.
Voir Travailler avec les sous-modules git de manière récursive pour la partie init.
Voir _git submodule
_ expliqué pour plus d'informations.
Avec la version 1.6.5 de git et versions ultérieures, 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 accélérer/paralléliser les téléchargements de sous-modules git avec _git clone --recursive
_? "
Vous pouvez lancer la récupération du sous-module en utilisant plusieurs threads, en parallèle.
Par exemple:
_git fetch --recurse-submodules -j2
_
Mieux encore, avec Git 2.23 (Q3 2019), vous pouvez cloner et extraire le sous-module de leur branche de suivi en une seule commande!
Voir commit 4c69101 (19 mai 2019) par Ben Avison (``) .
(Fusionné par Junio C Hamano - gitster
- dans commit 9476094 , 17 juin 2019)
clone
: ajouter le drapeau _--remote-submodules
_Lors de l'utilisation de _
git clone --recurse-submodules
_, il n'existait auparavant aucun moyen de passer un commutateur _--remote
_ à la commande implicite _git submodule update
_ pour tout cas d'utilisation pour lequel les sous-modules devaient être extraits sur leur branche de suivi à distance qu'avec le SHA-1 enregistré dans le superprojet.Ce correctif corrige cette situation.
Il passe réellement de _--no-fetch
_ à _git submodule update
_ également parce que le sous-module vient tout juste d'être cloné, aussi, aller chercher de la télécommande ne sert qu'à ralentir les choses.
Cela signifie:
_--[no-]remote-submodules:
_
Tous les sous-modules 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 de _
--remote
_ à _git submodule update
_.
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
Si votre sous-module a été ajouté dans une branche, veillez à l'inclure dans votre commande de clonage ...
git clone -b <branch_name> --recursive <remote> <directory>
Essaye ça:
git clone --recurse-submodules
Il extrait automatiquement les données du sous-module en supposant que vous avez déjà ajouté les sous-modules au projet parent.
Je pense que vous pouvez aller en 3 étapes:
git clone
git submodule init
git submodule update
réponse tardive
// git CLONE INCLUDE-SUBMODULES ADDRESS DESTINATION-DIRECTORY
git clone --recursive https://[email protected]/USERNAME/REPO.git DESTINATION_DIR
Comme je viens de passer une heure entière à bricoler avec un ami: Même si vous avez les droits d’administrateur sur BitBucket, clonez toujours le référentiel ORIGINAL et utilisez le mot de passe de celui qui possède le référentiel. Ennuyant de savoir que vous avez rencontré ce minetrap: P
Essayez ceci pour inclure des sous-modules dans le dépôt git.
git clone -b <branch_name> --recursive <remote> <directory>
o
git clone --recurse-submodules
Vous pouvez utiliser l'indicateur --recursive
lors du clonage d'un référentiel. Ce paramètre oblige git à cloner tous les sous-modules définis dans le référentiel.
git clone --recursive [email protected]:your_repo.git
Après le clonage, il est parfois possible de changer les branches des sous-modules, alors lancez la commande suivante:
git submodule foreach "git checkout master"
L'extraction parallèle de sous-modules vise à réduire le temps requis pour l'extraction d'un référentiel et de tous ses sous-modules associés en permettant l'extraction simultanée de plusieurs référentiels. Ceci peut être accompli en utilisant la nouvelle option --jobs, par exemple:
git fetch --recurse-submodules --jobs=4
Selon l'équipe de Git, cela peut considérablement accélérer la mise à jour des référentiels contenant de nombreux sous-modules. Lorsque vous utilisez --recurse-submodules sans la nouvelle option --jobs, Git ira chercher les sous-modules un par un.
Après avoir cloné le référant parent (qui contenait un référentiel de sous-module), procédez comme suit:
git submodule update --init --recursive
Essaye ça.
git clone -b <branch_name> --recursive <remote> <directory>
Si vous avez ajouté le sous-module dans une branche, assurez-vous de l'ajouter à la commande clone.
J'ai eu le même problème pour un référentiel GitHub. La clé SSH manquait dans mon compte. Le processus est
Ensuite, vous pouvez cloner le référentiel avec des sous-modules (git clone --recursive YOUR-GIT-REPO-URL
)
ou
Exécutez git submodule init
et git submodule update
pour récupérer des sous-modules dans un référentiel déjà cloné.
Si c'est un nouveau projet, vous pouvez simplement faire comme ceci:
$ git clone --recurse-submodules https://github.com/chaconinc/YourProjectName
S'il est déjà installé, alors:
$ cd YourProjectName (for the cases you are not at right directory)
$ git submodule init
$ git submodule update