Использование символа косой черты в имени ветки Git
Я почти уверен, что где-то в популярном Git-проекте я видел, что у ветвей был такой шаблон, как "feature/xyz".
Однако, когда я пытаюсь создать ветку с символом косой черты, я получаю сообщение об ошибке:
$ git branch labs/feature
error: unable to resolve reference refs/heads/labs/feature: Not a directory
fatal: Failed to lock ref for update: Not a directory
Та же проблема для (моя первоначальная попытка):
$ git checkout -b labs/feature
Как создать ветку в Git с символом косой черты?
9 ответов
Вы уверены, что филиал labs
не существует (как в этой теме)?
У вас не может быть и файла, и каталога с одинаковым именем.
Вы пытаетесь заставить git сделать это:
% cd .git/refs/heads % ls -l total 0 -rw-rw-r-- 1 jhe jhe 41 2009-11-14 23:51 labs -rw-rw-r-- 1 jhe jhe 41 2009-11-14 23:51 master % mkdir labs mkdir: cannot create directory 'labs': File exists
Вы получаете эквивалент ошибки "невозможно создать каталог".
Когда у вас есть ветка с косой чертой, она сохраняется как иерархия каталогов в.git/refs/heads
,
Возможно иметь иерархические имена ветвей (имена веток с косой чертой). Например, в моем репозитории у меня есть такая ветка (и). Единственное предостережение в том, что в репозитории нельзя использовать как ветку 'foo', так и ветку 'foo / bar'.
Ваша проблема не в создании ветки с косой чертой в имени.
$ git branch foo / bar ошибка: невозможно разрешить ссылки refs/heads/labs/feature: не каталог Неустранимый: Не удалось заблокировать ссылку для обновления: Не каталог
Приведенное выше сообщение об ошибке говорит о ветке 'labs / feature', а не о 'foo/bar' (если только это не ошибка в copy'n'paste, т.е. вы редактировали части сессии). Каков результат git branch
или же git rev-parse --symbolic-full-name HEAD
?
В моем случае я забыл, что там уже был неиспользованный labs
ветка. Удаление это решило проблему:
git branch -d labs
git checkout -b labs/feature
Объяснение:
Каждое имя может быть только родительской ветвью или обычной ветвью, но не обоими. Вот почему филиалы labs
а также labs/feature
не может существовать одновременно.
Причиной такого поведения является то, что ветви хранятся в файловой системе, и там вы также не можете иметь файл labs
и каталог labs
на том же уровне.
Иногда эта проблема возникает, если у вас уже есть ветка с базовым именем.
Я попробовал это:
git checkout -b features/aName origin/features/aName
К сожалению, у меня уже была ветка с именем features
и я получил исключение из вопроса задающего.
Удаление ветки features
Решил проблему, вышеприведенная команда сработала.
Имя ветки чувствительно к регистру, поэтому, если в Azure есть папки, созданные вашим менеджером выпуска, имена папок должны точно совпадать. Узнал на собственном горьком опыте, подняв это с менеджером.
В случае, если у кого-то есть эта проблема, когда они не могут оформить заказ в ветку, например:
features/23
потому что он говорит, что ветка существует, но вы не можете найти ее на Github — возможно, у вас есть локальная ветка с именем
features
что вызывает это.
Удалите локальную ветку с помощью
git branch -D features
и тогда вы сможете оформить заказ с помощью
git checkout features/23
и он должен работать так, как ожидалось.
Я делаю это из Visual Studio Git Changes
Как упоминалось ранее. Я сделал ошибку, создав ветку dev. главный разработчик
думая, что позже я мог бы просто назвать их dev/somebranchname.
Решение состояло в том, чтобы удалить dev, а затем создать dev/somebranchname. Следующая ветка разработки будет называться dev/nextbranchname. Это очень хорошо интегрируется с Visual Studio, где dev становится представлением папки, а ветки выстраиваются после этого.
Была такая же проблема, но я больше не мог найти конфликтующую ветку.
в моем случае в репо была и ветвь "foo" раньше, но больше нет, и я попытался создать и проверить "foo/bar" с пульта. Как я уже сказал, "foo" больше не существует, но проблема не исчезла.
В конце концов, ветка "foo" осталась в файле.git/config, после ее удаления все было в порядке:)
Я могу ошибаться, но я думал, что косые черты появляются только в именах веток, когда они связаны, например, с удаленным репо origin/master
,