Подтвердить что ты не робот

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

4b9b3361

Ответ 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.