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:
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
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
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
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
.