Les worktree

Disponible dans 21 heures

Devenir premium
Résumé Support

Avec git il est possible de travailler sur plusieurs fonctionnalité à l'aide de branche, mais lorsque l'on passe d'une branche à l'autre cela change le code dans notre copie de travaille. Avec les worktree on peut créer une copie du projet lorsque l'on crée une branche ce qui permet de travailler sur plusieurs branches en parallèles.

Créer un worktree

Imaginons un projet sur la branche main que l’on souhaite réécrire en Rust tout en conservant la version actuelle accessible. Depuis le dossier du projet, on peut créer un worktree dans un dossier adjacent :

git worktree add -b rust ../downloader-rust

Cette commande crée le dossier downloader-rust et une branche rust à partir de la branche actuelle. On peut ensuite se rendre dans ce dossier, modifier les fichiers et créer des commits normalement. Sans l’option -b, Git crée une branche dont le nom correspond à celui du dossier (ici downloader-rust).

On peut aussi créer un worktree à partir d’une branche existante en indiquant son nom après le chemin :

git worktree add ../downloader-go ref-golang

Le dossier downloader-go contient alors la version du projet présente sur la branche ref-golang.

La commande git worktree list affiche les worktrees disponibles, leur dossier et leur branche. Elle peut être exécutée depuis le projet principal ou depuis n'importe quel worktree.

Chaque worktree possède ses propres fichiers locaux, comme si on venait de faire un clone sur la branche. Les variables d’environnement et les dossiers créés localement pour faire fonctionner le projet ne sont pas automatiquement partagés. Il faut donc configurer chaque copie individuellement, par exemple en recopiant les variables d’environnement nécessaires. Aussi, si vous voulez lancer plusieurs fois le projet il faudra faire attention à ne pas avoir de conflits dans les ports utilisés.

Supprimer et nettoyer les worktrees

Une fois le travail terminé, on peut supprimer un worktree en indiquant son chemin (cela ne supprime pas la branche) :

git worktree remove ../downloader-rust

Si vous supprimer un dossier en dehors de cette commande vous pouvez utiliser la commande git worktree prune pour nettoyer les worktree orphelin.

Utilité

Les worktrees permettent de passer rapidement d’une tâche à une autre sans changer de branche dans la même copie de travail. Certains éditeurs, comme Zed, les prennent en charge et facilitent le changement de contexte directement depuis leur interface.

Ils sont aussi utiles si vous travaillez avec des agents : chaque agent peut disposer de son propre worktree pour travailler sur une tâche, ce qui permet d’avancer sur plusieurs tâches en parallèle.