Travailler simultanément sur plusieurs branches d'un même dépôt git

Dans le cadre du développement de Phyxo, il m'arrive de devoir travailler sur plusieurs branches en même temps pour de multiples raisons : 

  • vérifier "visuellement" que n'ai rien cassé entre deux versions
  • 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
  • exécuter les tests fonctionnels (en utilisant Behat) d'une branche sur le code d'une autre branche

Ce ne sont que quelques cas d'usage. Tous ces cas peuvent être gérés simplement en clonant plusieurs fois le dépôt de Phyxo et ça fonctionne parfaitement mais il y a beaucoup mieux : la commande git worktree. Cette commande permet de gérer plusieurs copie de travail à partir du même dépôt git. 

Par exemple si j'ai un clone sur la branche master et que je veux en même temps bosser sur la branche new-feature, il me suffit de taper la commande suivante :

$ git worktree add ../phyxo_new-feature new-feature

La commande va créer une nouvelle copie de travail du dépôt dans le répertoire ../phyxo_new-release en se positionnant sur la branche new-feature. 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 :

$ git worktree list

/var/projets/git/phyxo              8a8bae91f [master]
/var/projets/git/phyxo_new-feature  699393471 [new-feature]

Il y a de nombreux avantages à utiliser git worktree plutôt que de faire un git clone : 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.

Et pour finir de convaincre, d'autres exemples d'utilisation :

  • travailler sur une branche sans impacter le travail en cours sur la branche courante. On peut par exemple utiliser git stash 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 composer install
  • vérifier que le projet fonctionne sur une installation "propre" comme si je venais de cloner le dépôt.


 

Haut de page