Le Journal de Nikrou - Mot-clé - composerCe journal n'est pas un blog!2024-01-09T15:52:56+01:00urn:md5:501048fab0be4d1978e39dded54e4f42DotclearTravailler simultanément sur plusieurs branches d'un même dépôt giturn:md5:cf5198346e0d4781411313e68109272e2021-04-01T17:31:00+02:002021-04-01T16:52:10+02:00NicolasPHPcomposergitphptests <p>Dans le cadre du développement de <a href="https://www.phyxo.net/">Phyxo</a>, il m'arrive de devoir travailler sur plusieurs branches en même temps pour de multiples raisons : </p>
<ul>
<li>vérifier "visuellement" que n'ai rien cassé entre deux versions</li>
<li>vérifier un comportement que je trouve étrange sur la version en cours de développement et m'apercevoir que le comportement était le même sur une branche précédente</li>
<li>exécuter les tests fonctionnels (en utilisant <a href="https://behat.org/">Behat</a>) d'une branche sur le code d'une autre branche</li>
</ul>
<p>Ce ne sont que quelques cas d'usage. Tous ces cas peuvent être gérés simplement en clonant plusieurs fois le <a href="https://www.nikrou.net/post/2021/04/01/git@github.com:nikrou/phyxo.git">dépôt de Phyxo</a> et ça fonctionne parfaitement mais il y a beaucoup mieux : la commande <a href="https://git-scm.com/docs/git-worktree/fr">git worktree</a>. Cette commande permet de gérer plusieurs copie de travail à partir du même dépôt git. </p>
<p>Par exemple si j'ai un clone sur la branche master et que je veux en même temps bosser sur la branche <strong>new-feature</strong>, il me suffit de taper la commande suivante :</p>
<pre>
<code class="language-shell">$ git worktree add ../phyxo_new-feature new-feature</code></pre>
<p>La commande va créer une nouvelle copie de travail du dépôt dans le répertoire <strong>../phyxo_new-release</strong> en se positionnant sur la branche <strong>new-feature</strong>. Pour chaque branche c'est comme si on avait un projet différent sur disque. On peut vérifier que notre nouvelle copie de travail a été créée en tapant la commande suivante qui liste toutes les copies de travail :</p>
<pre>
<code class="language-shell">$ git worktree list
/var/projets/git/phyxo 8a8bae91f [master]
/var/projets/git/phyxo_new-feature 699393471 [new-feature]</code></pre>
<p>Il y a de nombreux avantages à utiliser <strong>git worktree</strong> plutôt que de faire un <strong>git clone</strong> : elle est plus rapide (les données sont déjà là), utilise des liens. C'est une copie light du dépôt d'origine et qui prend bien moins de place sur disque.</p>
<p>Et pour finir de convaincre, d'autres exemples d'utilisation :</p>
<ul>
<li>travailler sur une branche sans impacter le travail en cours sur la branche courante. On peut par exemple utiliser <a href="https://git-scm.com/docs/git-stash/fr">git stash</a> pour mettre de côté des modifications sur la branche courante et corriger un bug sur la version en production. Mais ces deux branches peuvent avoir beaucoup de différences. Mon IDE va devoir reconstruire ces index pour pouvoir me proposer de l'aide. Les dépendances ne sont pas forcément les mêmes, ni dans les mêmes versions. Il va falloir que je n'oublie pas de faire un <strong>composer install</strong>. </li>
<li>vérifier que le projet fonctionne sur une installation "propre" comme si je venais de cloner le dépôt.</li>
</ul>
<p><br />
</p>