Simple Enough Blog logo
  • Home 
  • Projets 
  • Tags 

  •  Langage
    • English
    • Français
  1.   Blogs
  1. Accueil
  2. Blogs
  3. Pourquoi et comment utiliser les sous-modules Git

Pourquoi et comment utiliser les sous-modules Git

Posté le 2 juillet 2025 • 7 min de lecture • 1 457 mots
Git   Thibault   Gestion De Projet   Sous-Modules  
Git   Thibault   Gestion De Projet   Sous-Modules  
Partager via
Simple Enough Blog
Lien copié dans le presse-papier

Les sous-modules Git permettent de gérer proprement des dépendances entre dépôts. Apprenez à les utiliser efficacement dans vos projets d'infrastructure.

Sur cette page
I. Introduction aux sous-modules Git   Pourquoi et comment utiliser les sous-modules Git   Pourquoi utiliser les sous-modules ?   II. Comment configurer un sous-module Git   Comment ajouter un sous-module ?   Cloner un projet avec des sous-modules   Mettre à jour un sous-modèle   Supprimer un sous-module   Conclusion   III. Quand utiliser (ou éviter) les sous-modules Git   ✅ Cas d’usage recommandés   ❌ Cas à éviter   IV. Gérer les sous-modules dans la pratique   Bonnes pratiques   Mise à jour groupée   V. Alternatives aux sous-modules Git   Git Subtree   Gestionnaires de paquets (npm, pip, etc.)   VI. Erreurs fréquentes   1.Cloner un projet sans initialiser les submodules   2. Mettre à jour un submodule sans committer le parent   3. Travailler en “detached HEAD” sans le comprendre   4. Modifier directement le code d’un submodule sans vouloir le versionner   5. Conflits dans .gitmodules et dans .git/config   6. Submodules non initialisés en CI/CD   7. Utiliser un submodule sur une branche mouvante (“tracking branch”)   8. Suppression incorrecte d’un submodule   VII. Conclusion   🔗 Ressources utiles  
Pourquoi et comment utiliser les sous-modules Git
Photo par Thibault Deheurles

I. Introduction aux sous-modules Git  

Les sous-modules Git sont une fonctionnalité native qui permet d’inclure un dépôt Git à l’intérieur d’un autre. Cette approche est utile lorsqu’il faut gérer des dépendances entre différents codebases, tout en conservant leur autonomie.

Les sous-modules pointent vers une révision précise d’un dépôt externe. Cela garantit que chaque version du projet principal utilise exactement la même version de ses sous-modules, assurant ainsi cohérence et reproductibilité.

Les sous-modules servent à composer un projet à partir de plusieurs dépôts, chacun pouvant évoluer indépendamment tout en étant contrôlé dans un ensemble cohérent.

Pourquoi et comment utiliser les sous-modules Git  

Lorsque vous travaillez sur des projets complexes, il est fréquent d’avoir besoin d’inclure d’autres projets Git comme dépendances. Git propose une fonctionnalité appelée sous-modules qui permet d’intégrer un dépôt Git à l’intérieur d’un autre. Cela peut être très utile pour gérer des bibliothèques partagées, des composants réutilisables ou tout autre code externe.

Pourquoi utiliser les sous-modules ?  

  • Gestion claire des dépendances : Chaque sous-module pointe vers une révision spécifique du dépôt externe, garantissant que votre projet utilise exactement la version souhaitée.
  • Indépendance des projets : Les sous-modules restent des dépôts Git indépendants, ce qui facilite leur mise à jour et leur maintenance.
  • Contrôle précis : Vous décidez quand et comment mettre à jour les sous-modules, évitant ainsi les mises à jour automatiques non désirées.

II. Comment configurer un sous-module Git  

Comment ajouter un sous-module ?  

Pour ajouter un sous-module à votre projet, utilisez la commande suivante :

git submodule add <url-du-dépôt> <chemin/dans/le/projet>

Par exemple :

git submodule add https://github.com/mon-compte/ma-bibliotheque.git libs/ma-bibliotheque

Cette commande va :

  • Cloner le dépôt externe dans le dossier libs/ma-bibliotheque.
  • Ajouter une entrée dans le fichier .gitmodules qui décrit le sous-module.
  • Ajouter le sous-module à l’index de votre projet.

N’oubliez pas de committer ces changements :

git commit -am "Ajout du sous-module ma-bibliotheque"

Cloner un projet avec des sous-modules  

Lorsque vous clonez un projet qui contient des sous-modules, vous devez initialiser et récupérer les sous-modules séparément :

git clone <url-du-projet>
git submodule init
git submodule update

Ou plus simplement :

git clone --recurse-submodules <url-du-projet>

Mettre à jour un sous-modèle  

Pour mettre à jour un sous-module vers la dernière version de sa branche principale (par exemple main), vous pouvez :

cd <chemin/du/sous-module>
git checkout main
git pull
cd ../
git add <chemin/du/sous-module>
git commit -m "Mise à jour du sous-module"

Important : il faut toujours committer dans le projet parent après modification d’un sous-module, car celui-ci suit un SHA-1 spécifique, et non une branche.

Supprimer un sous-module  

Pour supprimer un sous-module, il faut :

  1. Supprimer l’entrée dans .gitmodules.
  2. Supprimer l’entrée dans .git/config.
  3. Supprimer le répertoire du sous-module.
  4. Supprimer l’entrée dans l’index Git.

Voici les commandes correspondantes :

git submodule deinit -f <chemin/du/sous-module>
rm -rf .git/modules/<chemin/du/sous-module>
git rm -f <chemin/du/sous-module>
git commit -m "Suppression du sous-module"

Conclusion  

Les sous-modules Git sont un outil puissant pour gérer des dépendances dans vos projets. Ils permettent de garder un contrôle précis sur les versions utilisées et facilitent la modularité du code. Cependant, ils nécessitent une certaine discipline dans leur gestion pour éviter les conflits et les problèmes de synchronisation.

N’hésitez pas à les utiliser lorsque vous avez besoin d’inclure des projets externes tout en gardant une gestion propre et claire de votre code.


III. Quand utiliser (ou éviter) les sous-modules Git  

Bien connaître les cas d’usage est essentiel pour éviter de se heurter à la complexité inutilement.

✅ Cas d’usage recommandés  

Cas d’usagePourquoi les sous-modules sont adaptés
Bibliothèques partagées entre projetsPermet de fixer une version spécifique par projet
Composants d’infrastructure (ex : Terraform, CDK)Réutilisation avec contrôle de version
Plugins externes dans des dépôts dédiésIntégration stricte avec le code principal
Projets avec cycles de release distinctsIsolation et indépendance de mise à jour

❌ Cas à éviter  

  • Besoin de mises à jour automatiques des dépendances (privilégier les subtrees ou gestionnaires de paquets).
  • Projets à usage simple ou unique, où la séparation en plusieurs dépôts est surdimensionnée.
  • Environnements de développement où l’expérience de clonage doit être immédiate et fluide.

Résumé : Les sous-modules sont idéaux quand il faut intégrer de manière stricte des composants maintenus séparément, sans perte de contrôle sur leurs versions.


IV. Gérer les sous-modules dans la pratique  

Quelques bonnes pratiques à connaître :

Bonnes pratiques  

  • Toujours lancer git submodule update --init --recursive après un clone
  • Documenter les sous-modules dans le README.md
  • Éviter de pointer vers des branches mouvantes : préférez des tags ou commits fixes
  • Pour accélérer, utilisez des submodules peu profonds (--depth=1)

Mise à jour groupée  

git submodule foreach git pull origin main

Permet de mettre à jour tous les sous-modules en une seule commande.


V. Alternatives aux sous-modules Git  

Git Subtree  

  • Intègre le contenu du dépôt externe dans l’arbre du dépôt principal
  • Simpler à utiliser, pas de dépendance à .gitmodules
  • Moins adapté si les dépôts doivent rester indépendants

Gestionnaires de paquets (npm, pip, etc.)  

  • Idéal pour des dépendances liées à un écosystème spécifique
  • Versionnement sémantique, mise à jour facilitée
  • Moins de contrôle fin, ne convient pas pour les cas liés à l’infrastructure
FonctionnalitéSubmoduleSubtreeGestionnaire de paquets
Historique Git séparé✅✅❌
Suivi de commit spécifique✅✅❌
Simplicité de configuration❌✅✅
Adapté à l’infrastructure✅✅❌

VI. Erreurs fréquentes  

1.Cloner un projet sans initialiser les submodules  

Se contenter d’un simple :

git clone <repo>

Symptôme : Les dossiers des submodules apparaissent vides ou incomplets.

Solution :

Toujours cloner avec :

git clone --recurse-submodules

Ou après coup :

git submodule update --init --recursive

2. Mettre à jour un submodule sans committer le parent  

Aller dans un submodule, faire un ‘git pull’, puis oublier de committer le changement dans le projet principal.

Symptôme :

  • Les autres développeurs n’ont pas la bonne version
  • CI cassée : le pipeline récupère l’ancien commit SHA

Solution : Après mise à jour :

git add path/to/submodule
git commit -m "Update submodule"

Git ne pointe pas vers une branche mais vers un commit précis → il faut commit l’update.

3. Travailler en “detached HEAD” sans le comprendre  

Par défaut, lorsqu’on initialise un submodule, Git le place dans un état “detached HEAD”.

Symptôme :

  • On fait des modifications… mais on ne sait pas sur quelle branche elles vont
  • On perd le travail car on n’a pas créé de branche

Solution : Toujours vérifier la branche :

git checkout main

4. Modifier directement le code d’un submodule sans vouloir le versionner  

Souvent, un développeur modifie un submodule… en pensant qu’il modifie le projet principal.

Symptômes :

  • Modifications perdues
  • Commit rejeté (le submodule est en lecture seule, souvent dans un dépôt externe)

Bonne pratique :

  • Ne modifier un submodule que si vous êtes autorisé à contribuer dessus
  • Sinon : créer un fork ou produire un patch dans le projet principal

5. Conflits dans .gitmodules et dans .git/config  

Lors de renommages de sous-dossiers ou de changements d’URL, le fichier .gitmodules se retrouve désynchronisé.

Symptômes :

  • Git ne retrouve plus le submodule
  • Messages d’erreur cryptiques : “No submodule mapping found”

Solution :
Toujours mettre à jour les deux fichiers :

git mv old/path new/path
git add .gitmodules new/path
git commit -m "Fix submodule path"

6. Submodules non initialisés en CI/CD  

Très courant : les pipelines ne trouvent pas les submodules.

Symptômes :

  • Tests ou builds échouent
  • Le dossier du submodule est vide dans la CI

Solution :

Dans GitHub Actions (exemple) :

- name: Checkout repository
  uses: actions/checkout@v4
  with:
    submodules: recursive

Ou dans n’importe quelle CI :

git submodule update --init --recursive

7. Utiliser un submodule sur une branche mouvante (“tracking branch”)  

Erreur :
Pointer le submodule sur main ou develop en espérant que Git suivra automatiquement les mises à jour.

Git ne mettra jamais à jour automatiquement un submodule.

Symptômes :

  • Les versions divergent entre les équipes
  • Incohérences entre environnements (local, CI, production)

Solution :
Toujours pointer vers un tag ou un commit fixe.
C’est le principe même du fonctionnement des submodules.

8. Suppression incorrecte d’un submodule  

Supprimer simplement un dossier de submodule provoque des incohérences internes dans .git.

Symptômes :

  • Git affiche toujours le submodule comme existant
  • La CI détecte encore les anciens chemins

Solution :
Procédure complète (sécurisée) :

git submodule deinit -f path/to/module
rm -rf .git/modules/path/to/module
git rm -f path/to/module
git commit -m "Remove submodule"

VII. Conclusion  

Les sous-modules Git sont un outil puissant mais à manier avec soin. Ils conviennent parfaitement aux architectures modulaires, aux environnements DevOps et aux projets où le versioning précis est critique.

Prenez le temps d’évaluer si vos besoins justifient la complexité. Bien utilisés, les sous-modules offrent une manière propre de composer un projet à partir de briques autonomes.


🔗 Ressources utiles  

  • Documentation Git officielle
  • Comparaison Submodule vs Subtree
 Optimiser les performances Flutter : build(), keys, et const Widgets
Flutter & Redux : une recette bien ordonnée avec dispatch 
  • I. Introduction aux sous-modules Git  
  • II. Comment configurer un sous-module Git  
  • III. Quand utiliser (ou éviter) les sous-modules Git  
  • IV. Gérer les sous-modules dans la pratique  
  • V. Alternatives aux sous-modules Git  
  • VI. Erreurs fréquentes  
  • VII. Conclusion  
  • 🔗 Ressources utiles  
Suivez-nous

Nous travaillons avec vous !

   
Copyright © 2026 Simple Enough Blog Tous droits réservés. | Propulsé par Hinode.
Simple Enough Blog
Code copié dans le presse-papier