git submodule
Inclure d’autres dépôts dans votre dépôt
La commande 'git submodule' intègre un autre dépôt Git dans l’un de vos dossiers, épinglé sur un commit précis. Votre dépôt n’enregistre que le commit du sous-module à utiliser ; le sous-module garde son propre historique. C’est ainsi que les projets incluent des bibliothèques partagées sans les copier. Le clone nécessite --recurse-submodules (ou git submodule update --init) pour les récupérer.
Synopsis
git submodule add <url> [<path>]
git submodule update --init --recursive
git submodule status
git submodule foreach <command>Exemples
Ajouter une bibliothèque
git submodule add https://github.com/acme/ui.git lib/uiLa clone et enregistre son commit.
Après un clone
git submodule update --init --recursiveRécupérer chaque sous-module.
Cloner avec eux
git clone --recurse-submodules <url>Tout en une étape.
Passer à la dernière version
git submodule update --remoteAmener chaque sous-module au dernier commit de sa branche.
Exemples de workflows
cd lib/ui && git pullFaire avancer le sous-module
cd ../.. && git add lib/uiEnregistrer le nouveau commit
git commit -m "Update ui library"Le committer
Dépannage
Dossier de sous-module vide
Cause : Les sous-modules n’ont pas été récupérés
git submodule update --init --recursive
Astuces et pièges
Bonnes pratiques
- ✓Réglez git config --global submodule.recurse true pour que pull et checkout mettent à jour les sous-modules.
Erreurs fréquentes
- ✗Cloner sans --recurse-submodules et obtenir des dossiers vides.
- ✗Committer dans un sous-module sur une HEAD détachée et perdre le travail.
- ✗Oublier de committer le nouveau commit du sous-module dans le dépôt parent.
FAQ
Seulement l’URL du sous-module (dans .gitmodules) et le commit exact qu’il utilise.