Согласно документации, каждый git worktree обслуживает один branch (dev / feature / prod и т. Д.), Но мне также кажется неразумным, что каждая ветка будет иметь свой собственный worktree, поскольку она создает множество папок, что в какой-то момент может сбивать с толку.

Может ли один git worktree поддерживать несколько branches? например, все ветки, принадлежащие feature, а затем переключаться между тем, что актуально в данный момент? Это правильный подход?

0
arielma 10 Сен 2021 в 01:54

2 ответа

Лучший ответ

Из https://git-scm.com/docs/git-worktree

Репозиторий git может поддерживать несколько рабочих деревьев, что позволяет вам проверять более одной ветки за раз. С помощью git worktree add новое рабочее дерево связано с репозиторием. Это новое рабочее дерево называется «связанным рабочим деревом» в отличие от «основного рабочего дерева», подготовленного с помощью git-init или git-clone.

Если вы хотите добавить новые ветки в рабочее дерево, вам нужно написать:
git worktree add <path> <branch_name>

Например:

git checkout -B new_branch
git checkout main
git worktree add ./new_branch new_branch

Чтобы удалить это: git worktree remove

А вот как это выглядит: в виде дерева

В параметре path вы можете передать что угодно. Таким образом, вы можете управлять своими ветками по своему усмотрению, например, вы можете создать папку, в которой вы будете хранить только ветки с исправлениями или фьючерсами.

1
Filip Poplewski 10 Сен 2021 в 08:28

git worktree создает новую кассу, которая использует ваш существующий локальный репозиторий. У него есть собственный HEAD, который отслеживает, какая фиксация в настоящее время проверена, и собственная промежуточная область для коммитов сборки. Его основная цель - иметь возможность работать с несколькими ветвями одновременно без необходимости клонировать весь репозиторий или хранить свои изменения.

Рабочее дерево работает практически так же, как и любой другой кассовый аппарат. Вы можете переключиться на любую понравившуюся ветку, если она еще не проверена другим рабочим деревом. Вы можете запустить git-bisect. Вы можете перебазировать.

Рабочее дерево не обязательно должно быть для новой ветки, оно может быть для существующей ветки. git worktree add ../temp master создаст рабочее дерево с извлеченным мастером.

Создавать рабочие деревья нужно только в том случае, если вы собираетесь работать одновременно с несколькими ветвями. Например, вы работаете над функцией, и у вас есть много незафиксированных изменений, и приходит экстренное исправление. Вы можете создать рабочее дерево для этого исправления, выполнить исправление в рабочем дереве, а затем вернуться к исходной работе функции. Или, может быть, вы хотите протестировать что-то со старой версией, вы можете создать дерево работы и проверить старую версию.

Хороший процесс разработки не требует одновременной работы над несколькими ветвями.

2
Schwern 9 Сен 2021 в 23:38