Le problème que résolvent les worktrees
Vous êtes profond dans une branche feature quand un rapport de bug urgent arrive. Les worktrees vous permettent de checker plusieurs branches simultanément, dans des répertoires différents, partageant le même .git.
Ajouter un worktree
git worktree add ../hotfix-1234 hotfix/login-redirect
git worktree add -b hotfix/login-redirect ../hotfix-1234 main
Lister et gérer
git worktree list
git worktree remove ../hotfix-1234
git worktree prune
Comment ça marche en interne
Le .git dans votre répertoire d'origine est le vrai repo. Chaque worktree additionnel a un fichier .git pointant vers main-repo/.git/worktrees/<name>.
Workflows concrets
Hotfix sans déranger votre travail
git worktree add ../hotfix main
cd ../hotfix
git checkout -b hotfix/cve-fix
cd -
git worktree remove ../hotfix
Comparaison de longue durée
git worktree add ../old v2.4.0
diff -ru ../old/src ./src
Relire le PR d'un collègue localement
gh pr checkout 123 --branch pr-123
git worktree add ../pr-123 pr-123
cd ../pr-123
npm test
CI et worktrees
git worktree add ./build-linux $SHA
git worktree add ./build-windows $SHA
Limitations
- Vous ne pouvez pas checker la même branche dans deux worktrees.
- Certains hooks peuvent mal se comporter.
- Les submodules dans les worktrees peuvent avoir un comportement surprenant.
Alias qui aident
[alias]
wt = worktree
wtl = worktree list
wta = worktree add
wtr = worktree remove