Que sont les sous-modules Git et comment les utilisez-vous ?

Que sont les sous-modules Git et comment les utilisez-vous ?

Les sous-modules Git sont un moyen d’inclure un référentiel Git en tant que sous-répertoire d’un autre référentiel. Ce type d’imbrication de code source peut être très utile pour les projets qui souhaitent un contrôle plus précis de leurs dépendances et de leur processus de construction, et il est facile à configurer.

Pourquoi utiliser des sous-modules ?

Lorsque vous ajoutez un sous-module à un référentiel Git, vous créez essentiellement un lien entre les deux référentiels. Le référentiel principal et le référentiel de sous-modules peuvent être mis à jour indépendamment l’un de l’autre. Le référentiel parent contiendra une URL distante ainsi qu’une référence à l’ID de validation extrait dans l’historique du sous-module. Lorsque vous clonez le référentiel parent, il clone également les sous-modules.

Cela peut être utile si vous avez un projet qui dépend du code d’un autre projet et que vous souhaitez conserver les deux projets (et leurs historiques de version) séparés, tout en étant capable de travailler facilement avec les deux.

La principale alternative aux sous-modules consiste à utiliser des gestionnaires de packages tels que NPM, NuGet ou Maven. Les gestionnaires de packages fournissent un référentiel centralisé de packages et de bibliothèques qui peuvent être facilement installés et mis à jour. Cependant, vous devez publier une version spécifique de chaque package que vous souhaitez utiliser. Et si votre code est privé, vous devez utiliser votre propre registre de paquets privé.

Les sous-modules Git vous permettent de gérer les dépendances plus étroitement que la plupart des gestionnaires de packages. Avec les sous-modules, vous pouvez choisir exactement les versions de chaque dépendance que vous souhaitez inclure dans votre projet, et il est plus facile de mettre à jour l’ID de validation du sous-module que de publier un nouveau package.

Les sous-modules facilitent également la maintenance et l’utilisation des fourches des bibliothèques communes, ce que de nombreuses entreprises choisissent lorsque des fonctionnalités ou une personnalisation supplémentaires sont nécessaires. En fin de compte, si vous maintenez un référentiel pour le module et que vous avez besoin d’un contrôle précis sur vos dépendances, vous pouvez envisager d’utiliser des sous-modules au lieu de gestionnaires de packages.

Comment utiliser les sous-modules Git

Si vous clonez un référentiel qui utilise déjà des sous-modules, la plupart du travail a déjà été fait pour vous. Votre client git doit automatiquement cloner et télécharger le référentiel du sous-module, et il doit être mis à jour chaque fois que d’autres responsables envoient des modifications au sous-module.

Si ce n’est pas le cas, vous devrez peut-être exécuter git cloneavec le --recursivedrapeau, qui analysera et mettra à jour tous les sous-modules.

git clone --recurse-submodules URL

L’ajout d’un nouveau sous-module est assez simple. Si vous ajoutez un tout nouveau sous-module à partir d’un référentiel source, vous n’aurez qu’à exécutergit submodule add :

git submodule add URL submodule_directory

Cela téléchargera le référentiel de sous-modules à partir de l’URL et le clonera dans le submodule_directorydossier.

Cependant, si vous souhaitez convertir un dossier existant, le processus est un peu plus compliqué. Vous pouvez lire notre guide pour convertir un répertoire en sous-module ici , mais le processus implique de cloner à nouveau votre référentiel principal, de filtrer l’historique de validation pour n’inclure que le répertoire du module, puis de pousser le sous-module vers un nouveau référentiel.

Une fois que vous avez ajouté le sous-module, vous devrez valider les modifications dans le référentiel parent. Cela mettra à jour la configuration pour tout le monde qui extrait le référentiel parent.

git commit -m "Added submodule submodule_directory"

Mise à jour des sous-modules Git

Si quelqu’un d’autre a mis à jour le sous-module, ou si vous devez extraire des mises à jour du référentiel du sous-module, vous voudrez utilisergit submodule update :

git submodule update --remote

Cependant, si vous devez apporter des modifications vous-même, cela devient un peu plus délicat. Apporter des modifications au code dans les sous-modules Git nécessite un peu plus de soin par rapport à la mise à jour du code dans un référentiel Git standard, et vous avez généralement deux options :

  • Effectuez les modifications dans un référentiel séparé pour le sous-module, validez-les et mettez-les à jour normalement. Vous devrez exécuter git submodule updatedans le référentiel parent pour extraire les nouvelles modifications.
  • Effectuez les modifications dans le référentiel parent. Puisqu’un sous-module est essentiellement un référentiel Git intégré, vous pouvez accéder cdau répertoire du sous-module et exécuter les commandes Git normalement. C’est l’un des principaux avantages des sous-modules, car vous pouvez conserver des référentiels séparés tout en travaillant sur les deux en même temps.

Si vous apportez des modifications dans le référentiel parent, vous devrez accéder cdau sous-module et mettre à jour :

cd submodule_dir

git commit -am "submodule commit"


git push

Ensuite, revenez au référentiel parent et transférez les mises à jour du sous-module vers le référentiel parent :

cd. .

git commit -am "updated submodule"


git push

Vous devriez voir les changements à la fois sur le référentiel Github du sous-module ainsi que sur le référentiel parent.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *