Git worktree : plusieurs branches ouvertes à la fois
Guide git worktree
Git worktree : add, list, remove et prune, avec exemples | We.Inc
Générez la commande git worktree add exacte pour une nouvelle branche, une branche existante ou un commit détaché, puis listez, verrouillez, déplacez, supprimez et nettoyez vos worktrees en toute sécurité.
git worktree permet à un même dépôt d'avoir plusieurs dossiers de travail, chacun sur sa propre branche, qui partagent un seul stock d'objets. Lancez git worktree add ../hotfix -b hotfix pour créer un nouveau dossier sur une nouvelle branche, git worktree list pour les voir tous, et git worktree remove ../hotfix quand vous avez terminé. Pas besoin d'un second clone.
Les commandes worktree dont vous avez besoin au quotidien
Tâche
Commande
Nouveau dossier sur une nouvelle branche
git worktree add ../app-fix -b fix/login
Nouveau dossier sur une branche existante
git worktree add ../app-review feature/cart
Dossier jetable sur un commit
git worktree add --detach ../app-old v1.4.0
Voir tous les worktrees
git worktree list
Supprimer un worktree
git worktree remove ../app-fix
Nettoyer les dossiers supprimés à la main
git worktree prune
Faire un stash, changer de branche et tout recompiler chaque fois qu'on vous demande un correctif rapide fait perdre du temps. Un worktree vous donne une seconde copie de travail du même dépôt dans un autre dossier, si bien qu'une longue série de tests, une revue de code et un patch urgent peuvent chacun vivre dans leur propre répertoire. Utilisez le générateur pour obtenir les commandes, puis consultez la référence pour les sous-commandes plus rares.
Saisissez le dossier souhaité et le nom de la branche, puis choisissez nouvelle branche, branche existante ou commit détaché.
Copiez la commande add et exécutez-la depuis votre copie de travail principale.
Travaillez dans le nouveau dossier comme dans n'importe quel clone : commit, push et pull s'y font normalement.
Une fois la branche fusionnée, lancez la commande remove affichée par le générateur, et prune si vous avez un jour supprimé un dossier à la main.
Gardez les worktrees dans des dossiers voisins, par exemple ../app-fix, pour qu'ils ne se retrouvent jamais dans l'arborescence de la copie principale.
Chaque worktree a besoin de ses propres dépendances installées et de sa propre sortie de build. Prévoyez l'espace disque pour node_modules dans chaque dossier.
Une branche ne peut être extraite que dans un seul worktree à la fois. Si add refuse, vérifiez avec git worktree list où elle est déjà ouverte.
Verrouillez un worktree situé sur un disque amovible avec git worktree lock --reason "usb disk" pour que prune ne l'efface pas quand il est débranché.
Questions fréquentes
Quelle est la différence entre un worktree et un clone ?
Un clone copie tout le dépôt, historique compris. Un worktree lié partage les objets et les refs du dépôt d'origine et n'ajoute qu'un nouveau dossier de travail avec quelques métadonnées, si bien que les commits faits dans l'un sont immédiatement visibles depuis les autres, sans fetch.
Deux worktrees peuvent-ils utiliser la même branche ?
Pas par défaut. git worktree add refuse une branche déjà extraite ailleurs, car deux dossiers qui font avancer une même branche écraseraient mutuellement leur travail. --force passe outre, mais un HEAD détaché ou une seconde branche est presque toujours le meilleur choix.
Pourquoi git worktree remove échoue-t-il ?
La commande refuse quand le dossier contient des fichiers suivis modifiés ou des fichiers non suivis, pour que vous ne perdiez pas de travail. Faites d'abord un commit ou nettoyez le dossier, ou passez --force. Un worktree verrouillé demande --force deux fois.
Que fait git worktree prune ?
Elle supprime les enregistrements résiduels que git conserve pour les worktrees dont les dossiers n'existent plus, par exemple après en avoir supprimé un avec rm -rf. Ajoutez -n pour voir d'abord ce qu'elle supprimerait.
Comment renommer ou déplacer un dossier de worktree ?
Utilisez git worktree move <worktree> <new-path> pour que git mette à jour ses enregistrements. Si vous l'avez déjà déplacé avec le gestionnaire de fichiers, lancez git worktree repair depuis le nouvel emplacement pour le reconnecter.
Les bonnes raisons d'utiliser des worktrees
Relire une pull request sans perturber un travail à moitié fini, laisser tourner une suite de tests lente sur une branche tout en codant sur une autre, et comparer deux versions d'une application côte à côte sont les cas classiques.
Ils conviennent aussi aux outils qui lancent plusieurs sessions de code sur un même dépôt : chaque session a son propre dossier et sa propre branche, donc les fichiers non commités d'une session ne se retrouvent jamais dans le build d'une autre.
Ce qui est partagé et ce qui ne l'est pas
Tous les worktrees partagent les commits, les branches, les tags, les remotes et la plupart de la configuration. Chacun a son propre HEAD, son propre index et ses propres fichiers de travail, donc indexer dans un dossier n'a aucun effet sur les autres.
Les fichiers ignorés comme .env, node_modules et les dossiers de build ne sont pas copiés dans un nouveau worktree. Copiez vous-même le fichier env et installez les dépendances avant de lancer quoi que ce soit.
Toutes les sous-commandes de git worktree
Les sous-commandes de git worktree et leur syntaxe