Git/Sous-modules et Super-projets

< Git

Le super-projet est un concept apparu avec Git depuis v1.5.3, ayant pour but de mieux gérer de nombreux dépôts, en distinguant ceux qui sont hors du super-projet, de ceux à l'intérieur que l'on appelle les sous-modules.

Super-projets

modifier

Un super-projet est un dépôt Git, que l'on crée via git init dans le répertoire, puis git submodule add suivi des archives à inclure :

 $ git submodule add ./examples
  Adding existing repo at 'examples' to the index
  warning: LF will be replaced by CRLF in .gitmodules.
  The file will have its original line endings in your working directory.
 $

La structure résultante est de la forme suivante :

|- super-projet
  |- sous-module (archive Git) [a]
  |- sous-module [b]
  |- sous-module [c]
  |- sous-module [d]

Si quelqu'un récupère le super-projet, il trouvera une série de répertoire vide pour chaque sous-module. Pour les utiliser, il faut lancer git submodule init pour chacun.

Sous-modules

modifier

Une archive Git est considérée comme sous-module après avoir exécuté git submodule add dans un autre dépôt.

Workflow

modifier

Le flux de travail des super-projets et des sous-modules dit généralement adhérer à l'ordre :

  1. Changement du sous-module.
  2. git commit du sous-module
  3. git commit du super-projet
  4. git submodule update pour envoyer les changements aux différents dépôts antérieurs au super-projet.