Использование символа косой черты в имени ветки 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,

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