Zoeken…
Syntaxis
- git worktree add [-f] [--detach] [--checkout] [-b <new-branch>] <path> [<branch>]
- git worktree prune [-n] [-v] [--expire <expire>]
- git werkboom lijst [--porcelain]
parameters
Parameter | Details |
---|---|
-f - dwingen | Weigert standaard om een nieuwe werkboom te maken wanneer <branch> al is uitgecheckt door een andere werkboom. Deze optie overschrijft die beveiliging. |
-b <new-branch> -B <new-branch> | Maak met add een nieuwe tak met de naam <new-branch> beginnend bij <branch> en bekijk <new-branch> in de nieuwe werkboom. Als <branch> wordt weggelaten, wordt standaard HEAD . Standaard weigert -b een nieuwe branch te maken als deze al bestaat. -B heft deze beveiliging op en zet <new-branch> naar <branch> . |
--detach | Met toevoegen verwijdert u HEAD in de nieuwe werkboom. |
- [nee-] afrekenen | Voeg standaard --no-checkout <branch> , maar --no-checkout kan worden gebruikt om de check --no-checkout te onderdrukken om aanpassingen aan te brengen, zoals het configureren van sparse-checkout. |
-n - droogloop | Verwijder met Prune niets; meld gewoon wat het zou verwijderen. |
--porselein | Met lijst, uitvoer in een gemakkelijk te parseren indeling voor scripts. Dit formaat blijft stabiel in Git-versies en ongeacht de gebruikersconfiguratie. |
-v - verbose | Met snoeien, rapporteer alle verwijderingen. |
- verlopen <time> | Met snoeien vervallen alleen ongebruikte werkende bomen ouder dan <time> . |
Opmerkingen
Raadpleeg de officiële documentatie voor meer informatie: https://git-scm.com/docs/git-worktree .
Een werkboom gebruiken
Je zit midden in het werken aan een nieuwe functie en je baas eist dat je meteen iets oplost. Je wilt meestal git stash
gebruiken om je wijzigingen tijdelijk op te slaan. Op dit moment bevindt uw werkende boom zich echter in een staat van wanorde (met nieuwe, verplaatste en verwijderde bestanden en andere stukjes en beetjes rond) en wilt u uw voortgang niet verstoren.
Door een werkboom toe te voegen, maakt u een tijdelijke gekoppelde werkboom om de noodoplossing te maken, verwijdert u deze als u klaar bent en hervat u uw eerdere coderingssessie:
$ 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
OPMERKING: In dit voorbeeld bevindt de fix zich nog steeds in de noodfixvertakking. Op dit punt wil je waarschijnlijk git merge
of git format-patch
en daarna de emergency-fix branch verwijderen.
Werkboom verplaatsen
Momenteel (vanaf versie 2.11.0) is er geen ingebouwde functionaliteit om een reeds bestaande werkboom te verplaatsen. Dit wordt vermeld als een officiële bug (zie https://git-scm.com/docs/git-worktree#_bugs) .
Om deze beperking te omzeilen, is het mogelijk om handmatige bewerkingen rechtstreeks in de .git
referentiebestanden uit te voeren.
In dit voorbeeld woont de hoofdkopie van de repo bij /home/user/project-main
en bevindt de secundaire werkboom zich in /home/user/project-1
en we willen deze verplaatsen naar /home/user/project-2
.
Voer geen git-commando uit tussen deze stappen, anders kan de garbage collector worden geactiveerd en kunnen de verwijzingen naar de secundaire boom verloren gaan. Voer deze stappen vanaf het begin tot het einde zonder onderbreking uit:
Wijzig het .git-bestand van de
.git
om naar de nieuwe locatie in de hoofdstructuur te wijzen. Het bestand/home/user/project-1/.git
zou nu het volgende moeten bevatten:gitdir: /home/user/project-main/.git/worktrees/project-2
Wijzig de naam van de werkboom in de
.git
directory van het hoofdproject door de map van de worktree die zich daar bevindt te verplaatsen:$ mv /home/user/project-main/.git/worktrees/project-1 /home/user/project-main/.git/worktrees/project-2
Wijzig de referentie in
/home/user/project-main/.git/worktrees/project-2/gitdir
om naar de nieuwe locatie te wijzen. In dit voorbeeld zou het bestand de volgende inhoud hebben:/home/user/project-2/.git
Verplaats ten slotte uw werkboom naar de nieuwe locatie:
$ mv /home/user/project-1 /home/user/project-2
Als u alles correct hebt gedaan, moet het vermelden van de bestaande werkbomen verwijzen naar de nieuwe locatie:
$ git worktree list
/home/user/project-main 23f78ad [master]
/home/user/project-2 78ac3f3 [branch-name]
Het zou nu ook veilig moeten zijn om git worktree prune
.