git submodule

Espaces de travail et gros projets

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>
[ ] facultatif| ou<arg> valeur à remplacer... répétable--flag option

Exemples

Ajouter une bibliothèque

git submodule add https://github.com/acme/ui.git lib/ui

La clone et enregistre son commit.


Après un clone

git submodule update --init --recursive

Ré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 --remote

Amener chaque sous-module au dernier commit de sa branche.

Exemples de workflows

1
cd lib/ui && git pull

Faire avancer le sous-module

2
cd ../.. && git add lib/ui

Enregistrer le nouveau commit

3
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

A:

Seulement l’URL du sous-module (dans .gitmodules) et le commit exact qu’il utilise.