Git Submodules : partager et versionner du code entre plusieurs dépôts Git

Publié par Charles DOUANGDARA
Catégorie : DevOps
24/04/2026

Les Git Submodules sont une fonctionnalité de Git qui permet d’intégrer un dépôt Git à l’intérieur d’un autre dépôt. Cette approche est particulièrement utile lorsque plusieurs projets doivent partager une bibliothèque commune tout en gardant un contrôle précis sur les versions utilisées.

Dans cet article, nous allons comprendre ce qu’est un Git Submodule, comment il fonctionne, ainsi que ses avantages et ses limites dans un projet logiciel.

 

 

Un problème courant : partager et versionner du code entre plusieurs dépôts

 

Dans de nombreux projets logiciels, plusieurs applications ou services partagent une partie de leur code. Il peut s’agir :

  • d’une bibliothèque interne
  • d’outils communs
  • de composants réutilisables

 

Par exemple, une équipe peut maintenir plusieurs microservices qui utilisent la même librairie interne. Cette librairie peut gérer l’authentification, communiquer avec une API externe ou implémenter certaines fonctionnalités métier.

La gestion de ce code partagé devient rapidement complexe.

Une première approche consiste à copier le code dans chaque dépôt. Cette solution semble simple au départ, mais elle crée rapidement des problèmes :

  • les mises à jour doivent être appliquées manuellement
  • le risque d’incohérences augmente
  • il devient difficile de suivre les versions utilisées

 

Une autre approche consiste à placer ce code dans un dépôt Git séparé afin de le versionner indépendamment.

Cependant, une question apparaît rapidement :

Comment intégrer ce dépôt externe dans plusieurs projets tout en contrôlant la version utilisée ?

Les Git Submodules apportent une solution à ce problème. Ils permettent d’intégrer un dépôt Git dans un autre dépôt tout en conservant son historique et sa gestion de version.

Exemple de structure avec code partagé :


Chaque service utilise une bibliothèque commune maintenue dans un dépôt séparé.

Avec Git Submodules, un projet peut ressembler à ceci :


Le dossier shared-library correspond alors à un dépôt Git externe intégré dans le projet.

 

Git Submodules : présentation

 

Définition et principe de fonctionnement

Les Git Submodules permettent d’intégrer un dépôt Git dans un autre dépôt tout en conservant leur indépendance (voir la documentation).

Le dépôt intégré possède :

  • son propre historique
  • ses commits
  • son cycle de vie

 

Lorsque l’on ajoute un submodule, Git ne copie pas simplement les fichiers. Le dépôt principal enregistre une référence vers un commit précis du dépôt externe.

Cela signifie que le projet parent pointe vers une version exacte du submodule.

Tous les développeurs utilisent donc la même version du code partagé.

Git stocke les informations du submodule dans le fichier .gitmodules .

Ce fichier contient notamment :

  • l’URL du dépôt distant
  • le chemin du submodule dans le projet

 

Pourquoi les Git Submodules répondent à ce type de problématique

Les Git Submodules permettent de maintenir une bibliothèque ou un composant partagé dans un dépôt dédié.

Les projets qui en dépendent peuvent ensuite intégrer ce dépôt sous forme de submodule.

Chaque projet choisit alors la version du composant qu’il souhaite utiliser en pointant vers un commit précis.

Cette approche offre plusieurs avantages :

  • stabilité des projets
  • contrôle précis des versions
  • meilleure traçabilité

 

Git enregistre à la fois :

  • l’état du dépôt principal
  • la version exacte du submodule

 

Il devient donc possible de reproduire exactement l’état d’un projet à un instant donné.

 

Commandes principales Git Submodules

 

Voici les commandes les plus utilisées pour travailler avec les Git Submodules.

Ajouter un submodule

git submodule add https://github.com/organisation/shared-library.git libs/shared-library

Cette commande :

  • ajoute le dépôt externe
  • crée le fichier .gitmodules
  • enregistre la référence dans le dépôt principal

Cloner un projet avec ses submodules

git clone --recurse-submodules https://github.com/organisation/project.git

Cette commande permet de récupérer :

  • le dépôt principal
  • tous les submodules

Initialiser les submodules après un clone (si le projet a déjà été cloné)

git submodule update --init --recursive

Cette commande télécharge tous les submodules nécessaires.

 

Avantages et inconvénients

 

Les Git Submodules offrent plusieurs avantages pour gérer du code partagé :

  • Séparation claire des dépôts : Un composant partagé peut être développé dans son propre dépôt. Les projets dépendants peuvent ensuite l’intégrer comme submodule.
  • Contrôle précis des versions : Le dépôt principal référence un commit précis du submodule. Tous les développeurs utilisent donc exactement la même version.
  • Réutilisation du code : Les submodules évitent la duplication du code. Les corrections ou améliorations peuvent être faites directement dans le dépôt partagé.
  • Historique Git indépendant : Chaque composant conserve son propre historique Git. Cela facilite le suivi des modifications et la maintenance.

 

Mais malgré ces avantages, les Git Submodules introduisent aussi certaines contraintes :

  • Complexité du workflow : Les développeurs doivent comprendre : l’initialisation/mise à jour des submodules et la synchronisation avec le dépôt principal
  • Workflow moins intuitif : Lorsqu’un submodule change, il faut modifier le dépôt du submodule et mettre à jour la référence dans le dépôt principal. Cette étape supplémentaire peut provoquer des erreurs.
  • Gestion plus complexe dans CI/CD : Un simple git clone ne récupère pas automatiquement les submodules. Il faut utiliser des commandes supplémentaires dans les pipelines.

 

Alternatives aux Git Submodules

 

Les Git Submodules ne sont pas la seule solution pour partager du code.

 

Monorepo

https://monorepo.tools/

Dans un monorepo, plusieurs projets sont regroupés dans un seul dépôt.

Avantages :

  • gestion simplifiée des dépendances
  • modifications multi-projets facilitées

 

Inconvénient :

  • dépôt potentiellement très volumineux

 

Git Subtree

https://docs.github.com/en/get-started/using-git/about-git-subtree-merges

Git Subtree permet d’intégrer directement le contenu d’un dépôt dans un autre.

Avantage :

  • workflow plus simple pour les développeurs

 

Inconvénient :

  • gestion de l’historique moins claire

 

Gestionnaires de packages

Une autre approche consiste à publier une bibliothèque sous forme de package.

Exemples :

  • NuGet pour .NET
  • npm pour JavaScript

 

Les projets peuvent alors consommer cette bibliothèque comme une dépendance classique.