Git Submodule
Dernière mise à jour
Un sous-module intègre un dépôt Git dans un autre, épinglé à un commit précis. Le dépôt parent enregistre le commit du sous-module dont il dépend, afin que tout le monde obtienne la même version. C'est ainsi que vous incluez une bibliothèque ou un composant partagé qui vit dans son propre dépôt sans copier son code.
Essayez ceci dans le terminal playground - un vrai shell dans votre navigateur, rien à installer.
Syntaxe
| Command | What it does |
|---|---|
git submodule add <url> libs/x | Ajouter un dépôt comme sous-module dans libs/x |
git clone --recurse-submodules <url> | Cloner un dépôt et ses sous-modules |
git submodule update --init --recursive | Initialiser et récupérer les sous-modules après un clone simple |
git submodule update --remote | Mettre à jour les sous-modules vers leur dernier commit |
git submodule status | Afficher le commit de chaque sous-module |
Cas courants
| Goal | Command |
|---|---|
| Cloner un projet qui utilise des sous-modules | git clone --recurse-submodules <url> |
| Récupérer les sous-modules après avoir déjà cloné | git submodule update --init --recursive |
| Faire passer un sous-module à sa dernière version | git submodule update --remote |
FAQ git submodule
Qu'est-ce qu'un git submodule ?
Un sous-module est un dépôt Git imbriqué dans un autre dépôt Git à un commit fixe. Le dépôt parent stocke un pointeur vers ce commit exact plutôt que les fichiers du sous-module, de sorte que les collaborateurs récupèrent la même version. Il sert à inclure une dépendance ou un composant partagé qui possède son propre dépôt et son propre historique.
Comment cloner un dépôt avec des sous-modules ?
Utilisez
git clone --recurse-submodules <url> pour cloner le parent et tous ses sous-modules en une seule étape. Si vous avez déjà cloné sans cette option, exécutez ensuite git submodule update --init --recursive pour remplir les dossiers des sous-modules.Comment mettre à jour un sous-module vers le dernier commit ?
Exécutez
git submodule update --remote, qui récupère la branche suivie de chaque sous-module et le déplace vers le dernier commit. Validez ensuite le changement dans le dépôt parent, car le parent enregistre le commit du sous-module qu'il pointe - la mise à jour n'est pas enregistrée tant que vous n'avez pas validé ce pointeur.Pourquoi mon dossier de sous-module est-il vide après le clonage ?
Parce que vous avez cloné sans
--recurse-submodules, donc Git a créé les dossiers mais n'a pas récupéré leur contenu. Corrigez cela avec git submodule update --init --recursive, qui initialise et télécharge chaque sous-module.Puis-je m'entraîner en ligne ?
Oui. Ouvrez le terminal playground pour exécuter
git submodule dans un vrai shell dans votre navigateur - rien à installer. Le cours Git interactif et gratuit de Coddy couvre aussi la configuration de dépôt étape par étape.