<!-- .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 &lt;URL&gt; &lt;local-path&gt;</code></p>
        <p style="text-align:left">&nbsp;</p>
        <p style="text-align:left">Un fichier <code>.gitmodules</code> est créé dans le dépôt.</p>
        <p style="text-align:left">&nbsp;</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 :&nbsp;</p>
        <pre><code>git submodule update --remote --rebase</code></pre>
        <p style="text-align:left">&nbsp;</p>
        <p style="text-align:left">&nbsp;</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">&nbsp;</p>
        <p style="text-align:left">Pensez à commiter le fichier .submodule pour figer la nouvelle version.</p>
        <p style="text-align:left">&nbsp;</p>
        <p style="text-align:left">&nbsp;</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&nbsp;:</p>
        <pre style="color:rgb(51, 51, 51); font-size:0.9em"><code>git submodule init</code></pre>
        <p style="text-align:left">&nbsp;</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">&nbsp;</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.