Recherche…
Syntaxe
- git worktree ajouter [-f] [--detach] [--checkout] [-b <nouvelle-branche>] <chemin> [<branche>]
- git worktree prune [-n] [-v] [--expire <expire>]
- git worktree list [--porcelain]
Paramètres
Paramètre | Détails |
---|---|
-f --force | Par défaut, add refuse de créer un nouvel arbre de travail lorsque <branch> est déjà extrait par un autre arbre de travail. Cette option remplace cette sauvegarde. |
-b <new-branch> -B <new-branch> | Avec add, créez une nouvelle branche nommée <new-branch> partir de <branch> et extrayez <new-branch> dans le nouvel arbre de travail. Si <branch> est omis, la valeur par défaut est HEAD . Par défaut, -b refuse de créer une nouvelle branche si elle existe déjà. -B remplace cette sauvegarde, en réinitialisant <new-branch> à <branch> . |
--détacher | Avec add, détachez HEAD dans le nouvel arbre de travail. |
- [no-] checkout | Par défaut, add --no-checkout out <branch> , cependant, --no-checkout peut être utilisé pour supprimer la récupération afin de réaliser des personnalisations, telles que la configuration de la récupération partielle. |
-n --dry-run | Avec le pruneau, ne retirez rien; il suffit de rapporter ce que cela supprimerait. |
--porcelaine | Avec liste, sortie dans un format facile à analyser pour les scripts. Ce format restera stable pour toutes les versions de Git et quelle que soit la configuration de l'utilisateur. |
-v --verbose | Avec prune, signalez tous les retraits. |
--expire <time> | Avec Prune, n'expire que les arbres de travail inutilisés plus anciens que <time> . |
Remarques
Voir la documentation officielle pour plus d'informations: https://git-scm.com/docs/git-worktree .
Utiliser un worktree
Vous êtes en train de travailler sur une nouvelle fonctionnalité, et votre patron vient vous demander de réparer quelque chose immédiatement. Vous pouvez généralement utiliser git stash
pour stocker vos modifications temporairement. Cependant, à ce stade, votre arbre de travail est dans un état de désordre (avec des fichiers nouveaux, déplacés et supprimés, ainsi que d’autres éléments) et vous ne souhaitez pas perturber votre progression.
En ajoutant un worktree, vous créez une arborescence de travail liée temporaire pour effectuer le correctif d'urgence, supprimez-le une fois terminé, puis reprenez votre session de codage antérieure:
$ git worktree add -b emergency-fix ../temp master
$ pushd ../temp
# ... work work work ...
$ git commit -a -m 'emergency fix for boss'
$ popd
$ rm -rf ../temp
$ git worktree prune
Remarque: dans cet exemple, le correctif est toujours dans la branche de correctif d'urgence. À ce stade, vous souhaiterez probablement git merge
ou git format-patch
et ensuite supprimer la branche de correctif d'urgence.
Déplacement d'un worktree
Actuellement (à partir de la version 2.11.0), aucune fonctionnalité intégrée ne permet de déplacer un Worktree existant. Ceci est répertorié comme un bug officiel (voir https://git-scm.com/docs/git-worktree#_bugs) .
Pour contourner cette limitation, il est possible d'effectuer des opérations manuelles directement dans les fichiers de référence .git
.
Dans cet exemple, la copie principale du dépôt réside dans /home/user/project-main
et le worktree secondaire se trouve dans /home/user/project-1
et nous voulons le déplacer dans /home/user/project-2
.
N'effectuez aucune commande git entre ces étapes, sinon le ramasse-miettes peut être déclenché et les références à l'arborescence secondaire peuvent être perdues. Effectuez ces étapes du début jusqu'à la fin sans interruption:
Modifiez le fichier .git du
.git
pour qu'il pointe vers le nouvel emplacement dans l'arborescence principale. Le fichier/home/user/project-1/.git
devrait maintenant contenir les éléments suivants:gitdir: /home/user/project-main/.git/worktrees/project-2
Renommez le worktree à l'intérieur du répertoire
.git
du projet principal en déplaçant le répertoire worktree qui s'y trouve:$ mv /home/user/project-main/.git/worktrees/project-1 /home/user/project-main/.git/worktrees/project-2
Modifiez la référence dans
/home/user/project-main/.git/worktrees/project-2/gitdir
pour pointer vers le nouvel emplacement. Dans cet exemple, le fichier aurait le contenu suivant:/home/user/project-2/.git
Enfin, déplacez votre worktree vers le nouvel emplacement:
$ mv /home/user/project-1 /home/user/project-2
Si vous avez tout fait correctement, la liste des worktrees existants doit faire référence au nouvel emplacement:
$ git worktree list
/home/user/project-main 23f78ad [master]
/home/user/project-2 78ac3f3 [branch-name]
Il devrait maintenant aussi être sûr de lancer git worktree prune
.