Поиск…


Синтаксис

  • 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 между этими шагами, иначе сборщик мусора может быть запущен, а ссылки на вторичное дерево могут быть потеряны. Выполните эти шаги с самого начала до конца без перерыва:

  1. Измените файл .git рабочей группы, чтобы указать на новое местоположение внутри главного дерева. Файл /home/user/project-1/.git теперь должен содержать следующее:

    gitdir: /home/user/project-main/.git/worktrees/project-2
    
  2. Переименуйте рабочую папку внутри каталога .git основного проекта, перемещая каталог рабочей директории, который существует там:

    $ mv /home/user/project-main/.git/worktrees/project-1 /home/user/project-main/.git/worktrees/project-2
    
  3. Измените ссылку внутри /home/user/project-main/.git/worktrees/project-2/gitdir чтобы указать на новое местоположение. В этом примере файл будет иметь следующее содержимое:

    /home/user/project-2/.git
    
  4. Наконец, переместите свою рабочую папку в новое место:

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



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow