'<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
, Теперь это работает.