Поиск…
Синтаксис
- git worktree add [-f] [--detach] [--checkout] [-b <new-branch>] <path> [<branch>]
- git worktree prune [-n] [-v] [--expire <expire>]
- git worktree list [--porcelain]
параметры
параметр | подробности |
---|---|
-f --force | По умолчанию добавить отказ для создания нового рабочего дерева, когда <branch> уже проверено другим рабочим деревом. Этот параметр переопределяет эту гарантию. |
-b <new-branch> -B <new-branch> | С помощью add создайте новую ветку с именем <new-branch> начиная с <branch> , и запустите <new-branch> в новом рабочем дереве. Если <branch> опущена, по умолчанию используется HEAD . По умолчанию -b отказывается создавать новую ветку, если она уже существует. -B переопределяет эту защиту, перезагружая <new-branch> в <branch> . |
--detach | С добавлением отделите HEAD в новом рабочем дереве. |
- [no-] checkout | По умолчанию добавьте проверки <branch> , однако, для --no-checkout настроек можно использоватьno-checkout, чтобы выполнить настройки, такие как настройка разреженной проверки. |
-n -dry-run | С черносливом ничего не удаляйте; просто сообщите, что он удалит. |
--фарфор | Со списком выведите в формате простого для разбора скриптов. Этот формат будет оставаться стабильным в версиях Git и независимо от пользовательской конфигурации. |
-v --verbose | С черновиком сообщите обо всех удалениях. |
--expire <time> | С черносливом, только срок действия неиспользуемых рабочих деревьев старше <time> . |
замечания
Дополнительную информацию см. В официальной документации: https://git-scm.com/docs/git-worktree .
Использование рабочей группы
Вы правы в середине работы над новой функцией, и ваш босс требует, чтобы вы что-то исправили. Обычно вам может понадобиться использовать git stash
для временного хранения ваших изменений. Однако на данный момент ваше рабочее дерево находится в состоянии беспорядка (с новыми, перемещенными и удаленными файлами и другими разбросанными кусками), и вы не хотите нарушать ваш прогресс.
Добавляя рабочую строку, вы создаете временное связанное рабочее дерево, чтобы выполнить аварийное исправление, удалите его, когда закончите, а затем возобновите предыдущий сеанс кодирования:
$ 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
ПРИМЕЧАНИЕ. В этом примере исправление все еще находится в ветке аварийного исправления. На этом этапе вы, вероятно, захотите git merge
или git format-patch
а затем удалите ветвь аварийного исправления.
Перемещение рабочей группы
В настоящее время (с версии 2.11.0) нет встроенных функций для перемещения уже существующей рабочей станции. Это указано как официальная ошибка (см. Https://git-scm.com/docs/git-worktree#_bugs) .
Чтобы обойти это ограничение, можно выполнять ручные операции непосредственно в файлах ссылок .git
.
В этом примере главная копия репо находится в /home/user/project-main
а вторичная рабочая группа находится в /home/user/project-1
и мы хотим переместить ее в /home/user/project-2
.
Не выполняйте команду git между этими шагами, иначе сборщик мусора может быть запущен, а ссылки на вторичное дерево могут быть потеряны. Выполните эти шаги с самого начала до конца без перерыва:
Измените файл
.git
рабочей группы, чтобы указать на новое местоположение внутри главного дерева. Файл/home/user/project-1/.git
теперь должен содержать следующее:gitdir: /home/user/project-main/.git/worktrees/project-2
Переименуйте рабочую папку внутри каталога
.git
основного проекта, перемещая каталог рабочей директории, который существует там:$ mv /home/user/project-main/.git/worktrees/project-1 /home/user/project-main/.git/worktrees/project-2
Измените ссылку внутри
/home/user/project-main/.git/worktrees/project-2/gitdir
чтобы указать на новое местоположение. В этом примере файл будет иметь следующее содержимое:/home/user/project-2/.git
Наконец, переместите свою рабочую папку в новое место:
$ mv /home/user/project-1 /home/user/project-2
Если вы все сделали правильно, то перечисление существующих рабочих деревьев должно относиться к новому местоположению:
$ git worktree list
/home/user/project-main 23f78ad [master]
/home/user/project-2 78ac3f3 [branch-name]
Теперь также должно быть безопасно запускать git worktree prune
.