Использование символа косой черты в имени ветки Git - PullRequest
188 голосов
/ 27 марта 2010

Я почти уверен, что где-то в популярном 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 с символом косой черты?

Ответы [ 5 ]

199 голосов
/ 27 марта 2010

Вы уверены, что ветка 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.

94 голосов
/ 27 марта 2010

Возможно иметь иерархические имена ветвей (имена веток с косой чертой).Например, в моем репозитории у меня есть такая ветка (и).Единственное предостережение в том, что в репозитории не должно быть ветки 'foo' и ветки 'foo / bar'.

Ваша проблема не в создании ветки с косой чертой в имени.* Приведенное выше сообщение об ошибке говорит о ветке «labs / feature», а не о «foo / bar» (если только это не ошибка в copy'n'paste, т.е. вы редактировали части сессии).Каков результат git branch или git rev-parse --symbolic-full-name HEAD?

27 голосов
/ 20 марта 2013

Иногда эта проблема возникает, если у вас уже есть ветка с базовым именем.

Я пробовал это:

git checkout -b features/aName origin/features/aName

К сожалению, у меня уже была ветка с именем features, и я получил исключение из вопроса.

Удаление ветки features решило проблему, вышеприведенная команда сработала.

24 голосов
/ 04 февраля 2016

В моем случае я забыл, что там уже была неиспользованная ветка labs. Удаление это решило проблему:

git branch -d labs
git checkout -b labs/feature

Пояснение:

Каждое имя может быть только родительской ветвью или нормальной ветвью, но не обоими. Вот почему ветви labs и labs/feature не могут существовать одновременно в обоих случаях.

Причина такого поведения заключается в том, что ветви хранятся в файловой системе, и там вы также не можете иметь файл labs и каталог labs на одном уровне.

0 голосов
/ 27 марта 2010

Я могу ошибаться, но я подумал, что косые черты появляются только в именах веток, когда они связаны с удаленным репо, например origin/master.

...