Szukaj…


Składnia

  • git worktree dodaj [-f] [--detach] [--checkout] [-b <nazwa-branch>] <ścieżka> [<branch>]
  • git worktree prune [-n] [-v] [--expire <expire>]
  • lista git worktree [--porcelain]

Parametry

Parametr Detale
-f --force Domyślnie add odmawia utworzenia nowego działającego drzewa, gdy <branch> jest już wypisany przez inne działające drzewo. Ta opcja zastępuje to zabezpieczenie.
-b <new-branch> -B <new-branch> Dodając, utwórz nową gałąź o nazwie <new-branch> zaczynająca się od <branch> i sprawdź <new-branch> w nowym działającym drzewie. Jeśli <branch> zostanie pominięte, domyślnie zostanie ustawiony HEAD . Domyślnie -b odmawia utworzenia nowej gałęzi, jeśli już istnieje. -B zastępuje to zabezpieczenie, resetując <new-branch> do <branch> .
--odłączyć Po dodaniu odłącz HEAD w nowym drzewie roboczym.
- [no-] kasa Domyślnie dodaj wypisywanie <branch> , jednak --no-checkout można użyć do pominięcia wypłaty w celu wykonania dostosowań, takich jak konfiguracja sparse-checkout.
-n - suszyć Za pomocą śliwek niczego nie usuwaj; po prostu zgłoś, co by to usunął.
--porcelana Z listą, wyjście w łatwym do przeanalizowania formacie dla skryptów. Ten format pozostanie stabilny we wszystkich wersjach Git i niezależnie od konfiguracji użytkownika.
-v --verbose Za pomocą śliwek zgłoś wszystkie usunięcia.
--expire <time> Dzięki przycinaniu wygasają tylko nieużywane drzewa robocze starsze niż <time> .

Uwagi

Więcej informacji znajduje się w oficjalnej dokumentacji: https://git-scm.com/docs/git-worktree .

Korzystanie z stołu roboczego

Jesteś właśnie w trakcie pracy nad nową funkcją, a twój szef wymaga natychmiastowej naprawy. Zwykle możesz chcieć użyć git stash do tymczasowego przechowywania zmian. Jednak w tym momencie twoje drzewo robocze jest w stanie nieuporządkowanym (z nowymi, przeniesionymi i usuniętymi plikami oraz innymi drobiazgami rozsypanymi wokół) i nie chcesz zakłócać swoich postępów.

Dodając drzewo robocze, tworzysz tymczasowo połączone drzewo robocze, aby wprowadzić awarię, usunąć je po zakończeniu, a następnie wznowić wcześniejszą sesję kodowania:

$ 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

UWAGA: W tym przykładzie poprawka nadal znajduje się w gałęzi naprawy awaryjnej. W tym momencie prawdopodobnie chcesz git merge lub git format-patch a następnie usunąć gałąź naprawy awaryjnej.

Przenoszenie stołu roboczego

Obecnie (od wersji 2.11.0) nie ma wbudowanej funkcjonalności do przenoszenia już istniejącego drzewa roboczego. Jest to wymienione jako oficjalny błąd (patrz https://git-scm.com/docs/git-worktree#_bugs) .

Aby obejść to ograniczenie, można wykonywać operacje ręczne bezpośrednio w plikach referencyjnych .git .

W tym przykładzie główna kopia repozytorium znajduje się w /home/user/project-main a drugorzędne drzewo robocze znajduje się w /home/user/project-1 i chcemy przenieść go do /home/user/project-2

Nie wykonuj żadnych poleceń git pomiędzy tymi krokami, w przeciwnym razie może zostać wyzwolony moduł wyrzucający elementy bezużyteczne, a odniesienia do drzewa pomocniczego mogą zostać utracone. Wykonaj następujące kroki od początku do końca bez przerwy:

  1. Zmień plik .git drzewa roboczego, aby wskazywał nową lokalizację w głównym drzewie. Plik /home/user/project-1/.git powinien teraz zawierać następujące elementy:

    gitdir: /home/user/project-main/.git/worktrees/project-2
    
  2. Zmień nazwę drzewa roboczego w katalogu .git głównego projektu, przenosząc istniejący tam katalog drzewa roboczego:

    $ mv /home/user/project-main/.git/worktrees/project-1 /home/user/project-main/.git/worktrees/project-2
    
  3. Zmień odniesienie w /home/user/project-main/.git/worktrees/project-2/gitdir aby wskazywało na nową lokalizację. W tym przykładzie plik miałby następującą zawartość:

    /home/user/project-2/.git
    
  4. Na koniec przenieś swój stół roboczy do nowej lokalizacji:

    $ mv /home/user/project-1 /home/user/project-2
    

Jeśli wszystko zrobiłeś poprawnie, lista istniejących drzew roboczych powinna odnosić się do nowej lokalizacji:

$ git worktree list
/home/user/project-main  23f78ad [master]
/home/user/project-2     78ac3f3 [branch-name]

Teraz powinno być również bezpieczne uruchamianie git worktree prune .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow