Использование символа косой черты в имени ветки 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 с символом косой черты?
Ответы
Ответ 1
Вы уверены, что ветвь 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
.
Ответ 2
Возможно иметь иерархические имена ветвей (имена ветвей с косой чертой). Например, в моем репозитории у меня есть такая ветка (ы). Одно из предостережений заключается в том, что в репозитории вы не можете иметь ветвь foo и branch foo/bar.
Ваша проблема заключается не в создании ветки с косой чертой в имени.
$ git branch foo/bar
error: unable to resolve reference refs/heads/labs/feature: Not a directory
fatal: Failed to lock ref for update: Not a directory
В приведенном выше сообщении об ошибке говорится о ветке "labs/feature", а не "foo/bar" (если это не ошибка в copy'n'paste, т.е. вы отредактировали части сеанса). Что является результатом git branch
или git rev-parse --symbolic-full-name HEAD
?
Ответ 3
Иногда эта проблема возникает, если у вас уже есть ветвь с базовым именем.
Я пробовал это:
git checkout -b features/aName origin/features/aName
К сожалению, у меня уже была ветка с именем features
, и я получил исключение из вопроса.
Удаление ветки features
разрешило проблему, команда выше работала.
Ответ 4
В моем случае я забыл, что уже существует неиспользуемая ветвь labs
. Удаление этой проблемы решило проблему:
git branch -d labs
git checkout -b labs/feature
Объяснение:
Каждое имя может быть только родительской ветвью или нормальной ветвью, а не тем и другим. Поэтому ветки labs
и labs/feature
не могут существовать одновременно.
Причиной такого поведения является то, что ветки хранятся в файловой системе, и там вы также не можете иметь файл labs
и каталог labs
на том же уровне.
Ответ 5
Я мог ошибаться, но думал, что в названиях ветвей появляются только косые черты, когда они связаны с удаленным репо, например origin/master
.