'<Branch>' уже проверен в '</other/location>' в git рабочих тонах
Я начал использовать git worktrees. Кажется, что это работает, но я получаю эту ошибку при попытке проверить ветвь в клонированной рабочей строке:
fatal: '<branch>' is already checked out at '</other/location>'
Как мне обойти это без удаления каталога .git/worktrees
?
Ответы
Ответ 1
Git не позволит вам проверять одну и ту же ветку дважды, потому что если вы это сделаете, а затем перейдите на одну из двух рабочих деревьев и сделайте новую фиксацию, вы станете жертвой страдания, когда вы вернитесь к другому дереву.
Если вы действительно удалили другое дерево работы, просто запустите git worktree prune
, чтобы сделать Git реализовать это. Если вы на самом деле не удалили другое дерево работы, не проверяйте его дважды: это не весело.
Ответ 2
Как мне обойти это, не удаляя каталог .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
Дуй (pclouds
).
(Объединено Junio C Hamano - gitster
- в коммите bd0f794, 14 марта 2018 г.)
В вашем случае вы можете переместить существующее рабочее дерево в то место, где оно вам сейчас нужно (при попытке создать новое рабочее дерево для той же ветки).
worktree move
: новая команда
Эта команда позволяет перемещать связанные рабочие деревья.
Главное рабочее дерево не может (пока) быть перемещено.
А также:
worktree move
: отказаться от перемещения рабочих деревьев с субмодулями
Подмодули содержат файлы .git
с относительными путями.
После worktree move
эти файлы необходимо обновить, иначе они могут указывать в никуда.
Это повязка на повязку, чтобы убедиться, что " worktree move
" не сломало людей на рабочем месте случайно.
При .git
кода обновления файла .git
этот validate_no_submodules()
может быть удален.
Примечание: до Git 2.21 (Q1 2019) " git worktree remove
" и " git worktree move
" отказывались работать, когда задействован субмодуль.
Это было ослаблено, чтобы игнорировать неинициализированные подмодули.
Ответ 3
Просто перейдите в каталог worktree
нужной ветки и автоматически checkout
для вас.
В моем случае у меня есть два длительных worktree
, которые означают две соответствующие ветки рядом с master
.
$git branch
master # base stuff here
version-silver # some normal features
version-gold # some better features
Существует один репозиторий, но у меня есть 3 отдельные папки рядом друг с другом для каждой ветки выше. И сделайте общие изменения в master
. затем объедините его с двумя другими версиями.
Конкретные изменения каждой версии также будут размещены в соответствующей папке, а работы по каждому проекту изолированы, и IDE не будет путать.
Надеюсь, что это поможет.
Ответ 4
Обратите внимание, что это также происходит, если в вашем $pwd
есть ссылки. git
вероятно, должен readlink -f
на $pwd
перед проверкой.
Редактировать: Или это действительно может быть, потому что я пропустил вызов git worktree prune
. Теперь это работает.
Ответ 5
Поскольку вы не можете оформить заказ дважды как в рабочем дереве, так и в исходном хранилище. Как насчет проверки оригинального репо в другом месте, прежде чем оформить рабочее дерево?
git -C </other/location> checkout <branch>~1
git -C <worktree> checkout <branch>