'<Branch>' уже извлечен в '</ other / location>' в рабочих деревах git

Я начал использовать Git Worktrees. Кажется, это работает, но я получаю эту ошибку при попытке проверить ветку в клонированном рабочем дереве:

fatal: '<branch>' is already checked out at '</other/location>'

Как мне обойти это, не удаляя .git/worktrees каталог?

8 ответов

Git не позволит вам проверить одну и ту же ветку дважды, потому что если вы это сделаете, а затем перейдете к одному из двух рабочих деревьев и сделаете новый коммит, вы настроитесь на страдания, когда вернетесь к другой работа дерево.

Если вы фактически удалили другое рабочее дерево, просто запустите git worktree prune чтобы Git понял это. Если вы еще не удалили другое рабочее дерево, не проверяйте его дважды: это не весело.

Если вы ищете в руководстве по запросу "рабочее дерево" git-checkout(1)ты найдешь

      git checkout --ignore-other-worktrees <branch>

Как мне обойти это, не удаляя каталог.git/worktrees?

Вам будет легче с Git 2.17+ (Q2 2018), так как " git worktree "узнал" move ' а также ' remove подкоманды.

Смотрите коммит 7f19def (04 марта 2018 г.) Эрика Саншайна ( sunshineco )
См. Коммит ee6763a, коммит cc73385, коммит 78d986b, коммит c64a8d2, коммит 9f792bb, коммит 9c620fc (12 февраля 2018 г.) и коммит 4ddddc1 (24 января 2018 г.) Нгуеном Тай Нгом Дуй ( pclouds )
(Объединено Юнио С Хамано - gitster - в комитете bd0f794, 14 марта 2018 г.)

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

worktree move: новая команда

Эта команда позволяет перемещать связанные рабочие деревья.
Главное рабочее дерево не может (пока) быть перемещено.

А также:

worktree move: отказаться от перемещения рабочих деревьев с подмодулями

Подмодули содержит .git файлы с относительными путями.
После worktree move Эти файлы должны быть обновлены, или они могут указывать в никуда.

Это повязка, чтобы убедиться " worktree move "Не разбивайте народные деревья случайно.
когда .git код обновления файла на месте, это validate_no_submodules() может быть удален

Поскольку вы не можете оформить заказ дважды как в рабочем дереве, так и в исходном хранилище. Как насчет проверки оригинального репо в другом месте, прежде чем оформить рабочее дерево?

git -C </other/location> checkout <branch>~1
git -C <worktree> checkout <branch>

В моем случае это произошло, когда ветка не была извлечена из другого рабочего дерева, поэтому я был очень озадачен! Тем не менее, я нашел название ветки в.git/worktreesи обнаружил, что это рабочее дерево находится в процессе перебазирования той ветки, о которой я забыл. Послеgit rebase --abortиgit checkoutв какой-то другой ветке рабочего дерева проблема была решена.

Просто зайдите в worktree каталог нужной вам ветки, и он автоматически checkout для тебя.

В моем случае у меня два длительных worktree это означает, что две соответствующие ветви рядом с master,

$git branch
master  # base stuff here
version-silver # some normal features
version-gold # some better features

Существует один репозиторий, но у меня есть 3 отдельные папки рядом друг с другом для каждой ветви выше. И внести общие изменения в master, затем объедините его с обеими версиями.

Конкретные изменения каждой версии также будут помещаться в соответствующую папку, а работы над каждым проектом изолированы, и IDE не будет перепутана.

Надеюсь, это поможет.

Если вы действительно хотите, вы можете обойти эту проверку, либо непосредственно изменив ссылку в соответствующем файле HEAD, либо заново создав ветку с тем же именем, например: git checkout -B master origin/master

Как уже говорили другие, вам нужно знать, что вы делаете, хотя; ветви являются общими для всех рабочих деревьев, изменение одного рабочего дерева сразу же повлияет на состояние другого рабочего дерева.

Обратите внимание, что это также происходит, если ваш $pwd есть ссылки в нем. git должно вероятно readlink -f на $pwd до проверки.

Изменить: Или это действительно может быть, потому что я пропустил позвонить git worktree prune, Теперь это работает.

Другие вопросы по тегам