tags |
---|
git |
Le développement informatique implique souvent la réutilisation de bibliothèques de code déjà existantes. L’utilisation des sous-modules (submodules) de Git permet d’intégrer dans des répertoires spécifiques des composants qui sont versionnés séparément. C’est une manière d’ajouter des dépendances ou des extensions en tirant pleinement parti des fonctionnalités du versionnement de fichiers.
L’utilisation de sous-modules Git pour l’intégration de dépendances ou la gestion d’extensions est une bonne pratique car cela permet de clairement séparer leur code informatique. Elle permet en outre de pouvoir versionner le projet de manière fine et de gérer d’éventuels conflits avec les versions des composants.
Pour ajouter un sous-module dans un répertoire Git, il suffit de lancer la commande suivante :
git submodule add https://github.com/user/project.git
Il est possible de choisir le chemin du sous-module de la manière suivante :
git submodule add https://github.com/user/project.git <repository/name>
Il faut ajouter une close --recursive
pour cloner un répertoire avec ses sous-modules.
git clone --recursive https://github.com/user/project.git
Git n’ajoute pas automatiquement les sous-modules à un répertoire. Afin de les ajouter lancer la commande.
git submodule update
S’il y a des répertoires imbriqués
git submodule update --recursive
Les sous-modules ne se mettent pas automatiquement à jour avec le répertoire distant. Pour ce faire, il est nécessaire de se rendre dans le répertoire du sous-module pour le mettre à jour manuellement.
cd projects/project-name
git pull origin master
cd ../..
git commit -m "I updated extension-name" # si vous versionnez l'ensemble
Ou encore, pour mettre à jour les changements du répertoire, incluant les changements dans les sous-modules
git pull --recurse-submodules
Mettre à jour tous les changements des sous-modules
git submodule update --remote
mv a/submodule a/submodule_tmp
git submodule deinit -f -- a/submodule
rm -rf .git/modules/a/submodule
git rm -f a/submodule
Ou si vous voulez le conserver dans l’arbre de travail
git rm --cached a/submodule
mv a/submodule_tmp a/submodule