Submodules
yaggui liste les submodules d’un dépôt dans le panneau gauche, indique si chacun correspond au commit enregistré par le dépôt parent, et lance git submodule update à votre place. Un submodule est un autre dépôt épinglé à un commit précis à l’intérieur du vôtre : voir Git Tools - Submodules.
Voir les submodules et leur état
Section intitulée « Voir les submodules et leur état »La section Submodules du panneau gauche liste, par nom, tous les submodules déclarés dans .gitmodules. Elle est repliée par défaut et son en-tête affiche un compteur ; elle indique Aucun sous-module quand il n’y en a pas. Le filtre en haut du panneau porte sur les noms et les chemins des submodules.
Des pastilles à côté du nom indiquent son état :
| Pastille | Signification |
|---|---|
| non initialisé | Le submodule n’a jamais été extrait dans cet arbre de travail : son dossier est vide. |
| déplacé | Le submodule est extrait à un autre commit que celui enregistré par le dépôt parent. L’infobulle indique « Enregistré <sha>, extrait <sha> ». |
| modifié | Le submodule a des modifications locales (fichiers indexés, modifiés ou non suivis). Infobulle : Le submodule a des modifications locales. |
L’état est lu sans lancer Git ; il est actualisé à chaque changement du statut ou des références du dépôt, et après chaque opération.
Un clic sur un submodule ne fait que le sélectionner : son commit enregistré appartient à l’historique du submodule, donc le graphe ne bouge pas. Un double-clic ne fait rien.
Menu contextuel d’un submodule
Section intitulée « Menu contextuel d’un submodule »Faites un clic droit sur un submodule pour ouvrir son menu :
| Élément | Quand | Effet |
|---|---|---|
| Ouvrir dans un nouvel onglet | Toujours affichée ; désactivée avec l’indication Initialise-le d’abord quand le submodule n’est pas initialisé | Ouvre le submodule comme un dépôt à part entière. |
| Mettre à jour | Submodule initialisé | git submodule update --progress -- <path> |
| Initialiser | Submodule non initialisé | git submodule update --progress --init -- <path> |
| Mettre à jour (récursif) | Toujours | git submodule update --progress --recursive -- <path>, avec --init en plus quand le submodule n’est pas initialisé |
| Copier le chemin | Toujours | Copie le chemin relatif à la racine du dépôt. |
| Copier le SHA | Un commit est enregistré | Copie le SHA du commit enregistré. |
Initialiser et mettre à jour les submodules
Section intitulée « Initialiser et mettre à jour les submodules »La mise à jour extrait, dans chaque submodule, le commit enregistré par le dépôt parent. L’initialisation fait de même pour un submodule qui n’a jamais été extrait, après l’avoir enregistré. Les deux peuvent télécharger des commits depuis le remote du submodule.
Pour agir sur un seul submodule, utilisez son menu contextuel (voir ci-dessus). Pour agir sur tous, ouvrez la palette de commandes et lancez :
| Action de la palette | Commande |
|---|---|
| Mettre à jour les submodules | git submodule update --progress -- |
| Initialiser et mettre à jour tous les submodules (récursif) | git submodule update --progress --init --recursive -- |
Ces deux actions sont disponibles dès que le dépôt a au moins un submodule. Elles n’ont pas de raccourci par défaut ; vous pouvez en attribuer un dans les Préférences.
La mise à jour s’exécute en arrière-plan : la barre d’état l’affiche sous le nom Submodules avec sa progression, et vous pouvez l’y annuler. Une fois terminée, yaggui affiche Submodules mis à jour, la pastille déplacé disparaît, et la pastille modifié reste si le submodule avait des modifications locales : une mise à jour n’y touche jamais. En cas d’échec, le toast reprend l’erreur du catalogue d’erreurs, par exemple une erreur réseau ou d’authentification (voir Authentification).
Pour cloner un dépôt avec ses submodules, cochez Cloner les sous-modules dans la boîte de dialogue de clonage (voir Ouvrir un dépôt).
yaggui n’ajoute, ne retire (deinit), ne synchronise ni ne reconfigure les submodules. Utilisez pour cela le terminal intégré.
Ouvrir un submodule dans un onglet
Section intitulée « Ouvrir un submodule dans un onglet »Choisissez Ouvrir dans un nouvel onglet dans le menu contextuel du submodule, ou Ouvrir le submodule sous son diff. yaggui ouvre le dossier du submodule comme un dépôt dans un nouvel onglet (ou bascule vers l’onglet qui l’affiche déjà) et l’ajoute à vos dépôts récents. Seuls les submodules initialisés peuvent être ouverts.
Changements de submodule dans le panneau des changements et le diff
Section intitulée « Changements de submodule dans le panneau des changements et le diff »Les changements faits à l’intérieur d’un submodule n’apparaissent pas dans le panneau des changements du dépôt parent. Un submodule n’y figure que si son commit extrait diffère de celui de l’index (le gitlink a bougé), ou si un commit ou l’index modifie le commit enregistré.
La ligne du fichier porte une pastille submodule. La sélectionner affiche un panneau Commit du submodule modifié avec les SHA courts ancien et nouveau, à la place d’un diff texte. En dessous :
- Le submodule a aussi des modifications locales. apparaît quand le submodule est modifié.
- Ouvrir le submodule l’ouvre dans un onglet (submodules initialisés uniquement).
- Extraire le commit enregistré apparaît dans le diff de l’arbre de travail quand le commit extrait diffère du commit enregistré. Il lance
git submodule update --progress -- <path>.
Un changement de submodule s’indexe comme une entrée entière : l’indexation par hunk ou par ligne ne s’applique pas. Voir Indexer les changements et Diff.