<!-- .slide: data-background="#2E2E2E" data-state="nologo-slide" --> # Gestion des sous-modules @@ <!-- .slide: class="align-left" --> ## Principe Les sous-modules sont utilisés pour **inclure** un dépôt git dans un autre dépôt. <br/> Utile pour séparer le code dans différents dépôts. <br/> Un **sous module** peut être ajouté à plusieurs dépôts. Note: - composants partagés @@ <div class="sl-block" data-block-type="text" style="height: auto; width: 960px; left: 0px; top: 2px;" data-block-id="1b20eb205a12da7799a404bdd505aeed"> <div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;"> <h2>Fonctionnement</h2> </div> </div> <div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 840px; left: 40px; top: 139px;" data-block-id="a5715c1377d27859ee344644a0a9c077"> <div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;"> <p style="text-align:left">L'ajout d'un sous module se fait via la commande suivante : <code>git submodule add <URL> <local-path></code></p> <p style="text-align:left"> </p> <p style="text-align:left">Un fichier <code>.gitmodules</code> est créé dans le dépôt.</p> <p style="text-align:left"> </p> <p style="text-align:left">Se comporte comme un <code>git clone</code>.</p> </div> </div> <div class="sl-block" data-block-type="image" style="min-width: 4px; min-height: 4px; width: 880px; height: 132px; left: 40px; top: 550px;" data-block-id="6f7a128d177266c9b169a9a90f34d8ea"> <div class="sl-block-content" style="z-index: 13;"> <img src="svg/submodule_folder.svg" data-natural-width="140" data-natural-height="21" style=""/> </div> </div> @@ <div class="sl-block" data-block-type="text" style="height: auto; width: 960px; left: 0px; top: 2px;" data-block-id="b97091c6029189e47d8a8ca3987fcbc8"> <div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 10;"> <h2>Configuration</h2> </div> </div> <div class="sl-block" data-block-type="text" style="height: auto; width: 840px; left: 40px; top: 138px;" data-block-id="a7b391d82addc3222b633f975c543a38"> <div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;"> <p style="text-align:left">Se comporte <strong>comme un dépôt git</strong>. </p> <p style="text-align:left">Par défaut clone la branche principale du projet.</p> <p style="text-align:left">Pour se positionner sur un tag, il faut exécuter la commande <strong>git</strong> dans le dossier du sous module. </p> <p style="text-align:left">Pensez à commiter le fichier <code>.gitmodules</code>.</p> </div> </div> <div class="sl-block" data-block-type="image" style="width: 880px; height: 132px; left: 40px; top: 387px; min-width: 4px; min-height: 4px;" data-block-id="3f1d5d1f1b17f5de727067cd9aa6e5fd"> <div class="sl-block-content" style="z-index: 13;"> <img data-natural-width="140" data-natural-height="21" style="" data-lazy-loaded="" src="svg/submodule_folder.svg"/> </div> </div> <div class="sl-block" data-block-type="text" style="height: auto; width: 840px; left: 90px; top: 540px;" data-block-id="785dbe8c3b7ad3427e4f8791efef4770"> <div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 14;"> <p style="text-align:left"><code>$ cd reveal</code></p> <p style="text-align:left"><code>$ git checkout 1.0.0</code></p> </div> </div> @@ <div class="sl-block" data-block-type="text" style="height: auto; width: 960px; left: 0px; top: 0px;" data-block-id="136c17b655725cf7d6f65dcb24ccfb66"> <div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 10;"> <h2>Mise à jour</h2> </div> </div> <div class="sl-block" data-block-type="text" style="height: auto; width: 840px; left: 40px; top: 140px;" data-block-id="e3df6efc26c9a01aa7741b79e6aa3bd3"> <div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;"> <p style="text-align:left">La mise à jour s'exécute de cette manière : </p> <pre><code>git submodule update --remote --rebase</code></pre> <p style="text-align:left"> </p> <p style="text-align:left"> </p> <p style="text-align:left">remote : pour chercher les modifications distantes.</p> <p style="text-align:left">rebase : pour rejouter l'ordre des commits.</p> <p style="text-align:left"> </p> <p style="text-align:left">Pensez à commiter le fichier .submodule pour figer la nouvelle version.</p> <p style="text-align:left"> </p> <p style="text-align:left"> </p> </div> </div> @@ <div class="sl-block" data-block-type="text" style="height: auto; width: 960px; left: 0px; top: 0px;" data-block-id="b3677a7380d6a7da4da9d8eaa11fb87c"> <div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 10;"> <h2>Clone</h2> </div> </div> <div class="sl-block" data-block-type="text" style="height: auto; width: 840px; left: 40px; top: 140px;" data-block-id="8911e33da0e35820a3d078b1d25eac85"> <div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;"> <p style="text-align:left">Un dépôt contenant un sous-module devra l'initialiser :</p> <pre style="color:rgb(51, 51, 51); font-size:0.9em"><code>git submodule init</code></pre> <p style="text-align:left"> </p> <p style="text-align:left">Initialiser et mettre à jour les sous-modules d'un coup :</p> <pre style="color:rgb(51, 51, 51); font-size:0.9em"><code>git submodule update --init</code></pre> <p style="text-align:left"> </p> <p style="text-align:left">Les sous-modules peuvent contenir des sous modules eux-même :</p> <pre style="color:rgb(51, 51, 51); font-size:0.9em"><code>git submodule update --init --recursive</code></pre> </div> </div> @@ <!-- .slide: class="align-left" --> ## Conseils Pas de modifications via le dossier sous-module mais directement dans le repository original. <br> Définir au plus tôt dans le projet les sous-modules. <br> Penser à suivre les modification distantes. <br> Utiliser des tags pour les sous module.