Ce que sont les submodules
Un submodule est un dépôt Git imbriqué dans un autre. Le repo parent enregistre l'URL du submodule et un SHA spécifique, donc quiconque clone le parent peut récupérer le code exact qui a été testé ensemble. Utilisez les submodules quand vous voulez ancrer une dépendance à un commit fixe tout en préservant son histoire indépendante.
Ajouter un submodule
git submodule add https://github.com/example/lib third_party/lib
git commit -m "Ajouter submodule lib"
Cela crée un fichier .gitmodules qui enregistre le chemin et l'URL.
Cloner un projet avec submodules
git clone --recurse-submodules https://github.com/you/parent
# ou, après un clone simple :
git submodule update --init --recursive
Configurez submodule.recurse = true globalement.
Mettre à jour vers un nouveau commit
cd third_party/lib
git fetch
git checkout v2.0.0
cd ../..
git add third_party/lib
git commit -m "Bump lib to v2.0.0"
Diff et status
git diff --submodule=log
git submodule status
git submodule summary
Foreach
git submodule foreach 'git fetch --all'
git submodule foreach --recursive 'git checkout main && git pull'
Erreurs courantes
Oublier --init au premier clone laisse les répertoires de submodule vides. Éditer dans un submodule et commiter dans le parent sans avoir poussé le submodule d'abord laisse les collaborateurs avec un parent référençant un SHA inatteignable.
Piège du suivi de branche
Les submodules font checkout d'un HEAD détaché au SHA enregistré. Avant de modifier des fichiers, faites git checkout d'une branche dans le submodule.