Présentation du problème
Les worktrees Git ne sont pas une frontière d'isolation pour les agents de codage. En effet, un agent peut installer un hook qui s'exécute sur la machine hôte la prochaine fois qu'un commit est effectué dans le réel référentiel. Cela peut également réécrire l'e-mail associé aux commits.
Fonctionnement des worktrees
Un worktree est un second répertoire de travail attaché à un même répertoire Git (.git). Tout ce qui est intéressant se trouve dans ce répertoire .git. Les worktrees sont devenus la solution par défaut car ils offrent une isolation à peu de frais, mais cette isolation est en réalité très mince.
Partage de données entre worktrees
Les worktrees partagent de nombreuses données, notamment l'object store (.git/objects), les références et les branches (refs/heads, packed-refs), la configuration (.git/config), le stash (refs/stash) et les hooks (.git/hooks). Cela signifie qu'un agent peut accéder à ces données et les modifier, ce qui peut avoir des conséquences importantes.
Implications et limites
Les worktrees ne sont pas une frontière d'isolation pour les agents de codage. Pour obtenir une véritable isolation, il est nécessaire d'utiliser des clones de référentiels. Les clones locaux ne copient pas l'historique, mais utilisent des liens durs, ce qui signifie qu'ils partagent les mêmes objets Git. Cela signifie que la création d'un clone local ne coûte pas plus que la création d'un worktree.