-
Notifications
You must be signed in to change notification settings - Fork 0
Utilisation des submodules
Afin que le travail avec les submodules soient moins fastidieux, les settings suivants sont fortement recommandés:
git config --global diff.submodule log # Après un git diff, affiche aussi les nouveaux commits des submodules
git config --global status.submodulesummary true # Après un git status, affiche un résumé des commits des submodules
git config --global submodule.recurse true # Fais en sorte que toutes les commandes git (sauf clone), auront le flag --recurse-submodules
git config --global push.recurseSubmodules on-demand # S'assure qu'on ne puisse pas pousser des changements sans que les submodules soient eux aussi poussés
git config --global alias.sdiff '!'"git diff && git submodule foreach 'git diff'" # Ajout de la commande 'git sdiff' pour voir un diff de chaque submodule
git config --global alias.supdate '!'"git submodule update --remote --merge" # Ajout de la commande 'git supdate' pour l'update de submodules
Supposons que nous avons le projet suivant. Les prochaines sections seront des exemples sur ce projet
- project-test
- module-a (submodule)
Afin de vous habituer avec les submodules, je vous suggère de créer ce même setup dans votre git personnel et de suivre les exemples. Voici comment:
- Créer un repo
module-a
etproject-test
. - Push un fichier quelquonque sur le
module-a
- Cloner
project-test
et faire les commandes suivantes:
cd project-test
git submodule init
git submodule add <Lien vers le repo module-a>
git add .
git commit -m "Initial commit"
- Pour chaque submodule, on doit définir sur quelle branche on veut toujours se référer sinon on sera toujours en HEAD detached
git submodule foreach 'git checkout main'
git supdate
Scénario: Quelqu'un a travaillé sur le module-a
uniquement, mais le project-test
n'a pas encore recu les changements. On veut aller chercher les changements du module-a
, l'intégrer sur le project-test
et commit le tout.
git supdate module-a # Si on omet le nom de module, tous les modules seront updaté
git status
git add .
git commit -m "Message décrivant l'intégration réalisée"
Scénario: Je veux travailler sur project-test
et le module-a
en même temps et ensuite pousser les changements sur module-a
et project-test
cd module-a
touch allo.txt
git add .
git commit -m "Ajout d'un beau fichier texte"
cd ..
git add .
git commit -m "Intégration du nouveau fichier texte sur le project-test"
git push # La commande push enverra les changements sur module-a et project-test
Toutes les informations de ce tutoriel ont été prise dans la documentation de git