Le problème que résolvent les worktrees
Vous êtes en pleine feature quand une demande urgente de hotfix arrive. Faire un stash ou changer de contexte est risqué et lent. Les worktrees vous permettent de faire checkout de branches additionnelles dans des répertoires séparés, partageant tous une seule base de données d'objets sous-jacente. Chaque worktree a son propre HEAD, index et arbre de travail.
Ajouter un worktree
git worktree add ../hotfix main
cd ../hotfix
git checkout -b hotfix/urgent
# corriger le bug, push, retour
cd -
git worktree remove ../hotfix
Lister et élaguer
git worktree list
git worktree list --porcelain
git worktree prune
git worktree remove ../old-feature
git worktree lock ../release
git worktree unlock ../release
Worktrees détachés
git worktree add --detach ../v1.0 v1.0.0
Règles de partage de branche
La même branche ne peut pas être checkout dans deux worktrees simultanément, par conception.
Cas d'usage
- Long build CI dans un worktree pendant que vous continuez à coder.
- Comparaison côte à côte de deux branches dans votre éditeur.
- Bisect dans un worktree pendant que votre checkout principal reste en place.
- Lancer plusieurs versions de langage ou builds de conteneur en parallèle.
Configuration
git config --worktree user.email [email protected]
Activez avec git config extensions.worktreeConfig true.
Erreurs courantes
Supprimer un répertoire de worktree avec rm -rf au lieu de git worktree remove laisse des métadonnées obsolètes.