Git worktree: add, list, remove en prune, met voorbeelden | We.Inc
Stel het exacte git worktree add-commando samen voor een nieuwe branch, een bestaande branch of een detached commit, en gebruik daarna veilig list, lock, move, remove en prune.
Met git worktree krijgt één repository meerdere werkmappen, elk op een eigen branch, die één gedeelde object store gebruiken. Voer git worktree add ../hotfix -b hotfix uit om een nieuwe map op een nieuwe branch te maken, git worktree list om ze allemaal te zien, en git worktree remove ../hotfix als u klaar bent. Een tweede clone is niet nodig.
De worktree-commando's die u dagelijks nodig hebt
Taak
Commando
Nieuwe map op een nieuwe branch
git worktree add ../app-fix -b fix/login
Nieuwe map op een bestaande branch
git worktree add ../app-review feature/cart
Wegwerpmap op een commit
git worktree add --detach ../app-old v1.4.0
Alle worktrees bekijken
git worktree list
Een worktree verwijderen
git worktree remove ../app-fix
Mappen opruimen die u met de hand hebt verwijderd
git worktree prune
Elke keer stashen, wisselen en opnieuw bouwen als iemand om een snelle fix vraagt, kost tijd. Een worktree geeft u een tweede checkout van dezelfde repo in een andere map, zodat een lange testrun, een code review en een dringende patch elk in hun eigen map kunnen staan. Gebruik de builder voor de commando's en raadpleeg daarna het overzicht voor de minder gebruikte subcommando's.
Typ de gewenste map en de branchnaam, en kies nieuwe branch, bestaande branch of detached commit.
Kopieer het add-commando en voer het uit vanuit uw hoofdcheckout.
Werk in de nieuwe map zoals in elke clone: commit, push en pull daar.
Is de branch gemerged, voer dan het remove-commando uit dat de builder toont, en gebruik prune als u ooit een map met de hand hebt verwijderd.
Houd worktrees als naastgelegen mappen, bijvoorbeeld ../app-fix, zodat ze nooit binnen de boom van de hoofdcheckout terechtkomen.
Elke worktree heeft eigen geïnstalleerde dependencies en build-output nodig. Reken op schijfruimte voor node_modules in elke map.
Een branch kan maar in één worktree tegelijk uitgecheckt zijn. Weigert add, kijk dan in git worktree list waar hij al open staat.
Vergrendel een worktree op een verwisselbare schijf met git worktree lock --reason "usb disk", zodat prune hem niet opruimt terwijl de schijf losgekoppeld is.
Veelgestelde vragen
Wat is het verschil tussen een worktree en een clone?
Een clone kopieert de hele repository, inclusief geschiedenis. Een gekoppelde worktree deelt de objects en refs van de oorspronkelijke repository en voegt alleen een nieuwe werkmap plus wat metadata toe, zodat commits in de ene direct zichtbaar zijn in de andere zonder fetch.
Kunnen twee worktrees dezelfde branch gebruiken?
Standaard niet. git worktree add weigert een branch die elders al is uitgecheckt, omdat twee mappen die één branch verplaatsen elkaars werk zouden overschrijven. --force omzeilt dit, maar een detached HEAD of een tweede branch is bijna altijd de betere keuze.
Waarom mislukt git worktree remove?
Het weigert als de map gewijzigde getrackte bestanden of untracked bestanden bevat, zodat u geen werk kwijtraakt. Commit of ruim de map eerst op, of geef --force mee. Een vergrendelde worktree heeft twee keer --force nodig.
Wat doet git worktree prune?
Het verwijdert de achtergebleven gegevens die git bijhoudt voor worktrees waarvan de mappen niet meer bestaan, bijvoorbeeld nadat u er een hebt verwijderd met rm -rf. Voeg -n toe om eerst te zien wat het zou verwijderen.
Hoe hernoem of verplaats ik een worktree-map?
Gebruik git worktree move <worktree> <new-path> zodat git zijn gegevens bijwerkt. Hebt u hem al met de bestandsbeheerder verplaatst, voer dan git worktree repair uit vanaf de nieuwe locatie om hem opnieuw te koppelen.
Goede redenen om worktrees te gebruiken
Een pull request reviewen zonder half afgemaakt werk te verstoren, een trage testsuite op de ene branch laten draaien terwijl u op een andere codeert, en twee versies van een app naast elkaar vergelijken zijn de klassieke gevallen.
Ze passen ook bij tools die meerdere codeersessies op één repository draaien: elke sessie krijgt een eigen map en branch, zodat niet-gecommitte bestanden van de ene sessie nooit in de build van een andere lekken.
Wat gedeeld wordt en wat niet
Alle worktrees delen commits, branches, tags, remotes en de meeste config. Elke worktree heeft een eigen HEAD, index en werkbestanden, dus stagen in de ene map doet niets met de andere.
Genegeerde bestanden zoals .env, node_modules en buildmappen worden niet naar een nieuwe worktree gekopieerd. Kopieer het env-bestand zelf over en installeer de dependencies voordat u iets draait.