Какие символы недопустимы в имени ветви?
Какие символы недопустимы в имени ветви?
5 ответов
Правила именования
Git устанавливает следующие правила именования ссылок:
Они могут включать слэш
/
для иерархической (директории) группировки, но ни один компонент, разделенный косой чертой, не может начинаться с точки.
или конец последовательности.lock
,Они должны содержать хотя бы один
/
, Это обеспечивает наличие такой категории, какheads/
,tags/
и т.д., но фактические имена не ограничены. Если--allow-onelevel
опция используется, это правило отменено.У них не может быть двух последовательных точек
..
в любом месте.Они не могут иметь управляющие символы ASCII (т. Е. Байты, значения которых меньше, чем
\040
, или же\177
DEL
), космос, тильда~
, карета^
или двоеточие:
в любом месте.У них не может быть знака вопроса
?
, звездочка*
или открытая скобка[
в любом месте. Увидеть--refspec-pattern
Вариант ниже для исключения из этого правила.Они не могут начинаться или заканчиваться косой чертой
/
или содержат несколько последовательных слешей (см.--normalize
вариант ниже для исключения из этого правила)Они не могут заканчиваться точкой
..
Они не могут содержать последовательность
@{
,Они не могут быть одним персонажем
@
,Они не могут содержать
\
,
Спасибо Jakub Narębski, Jakub Narębski странице для git check-ref-format
имеет больше деталей.
В принятом ответе и на странице руководства уже объясняется, какие правила применяются к именам веток Git.
В исходном коде массив Gitrefname_disposition используется для определения того, как обрабатывать различные символы в
refnames
. Индексы в массиве соответствуют кодам ASCII, а значения указывают, как обрабатываются символы ASCII.
/*
* How to handle various characters in refnames:
* 0: An acceptable character for refs
* 1: End-of-component
* 2: ., look for a preceding . to reject .. in refs
* 3: {, look for a preceding @ to reject @{ in refs
* 4: A bad character: ASCII control characters, and
* ":", "?", "[", "\", "^", "~", SP, or TAB
* 5: *, reject unless REFNAME_REFSPEC_PATTERN is set
*/
static unsigned char refname_disposition[256] = {
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 2, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 4, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 4
};
С
4
означает, что соответствующий символ ASCII не разрешен внутри имен веток, есть 39 запрещенных символов. Запрещенные символы - это управляющие символы ASCII (коды ASCII <32), печатаемые символы
: ? [ \ ^ ~
и символ пробела / табуляции.
Еще 3 символа требуют выполнения некоторых условий (см. Комментарий к документу):
-
.
: Две следующие друг за другом точки запрещены. -
{
: Подстрока@{
запрещен. -
*
: Отклонить, еслиREFNAME_REFSPEC_PATTERN
установлен.
Нулевой байт завершает имя ветки и
/
создает новую иерархию каталогов для ветви. Поэтому имена веток не могут заканчиваться косой чертой. Например
git checkout -b 'a/b/c'
создаст соответствующую структуру каталогов в
.git/refs/heads
Обратите внимание, что
UTF-8
в названиях веток можно использовать символы:
$ git checkout -b $'\xCE\xA9'
Switched to a new branch 'Ω'
Кроме того, следует соблюдать осторожность, если вы планируете использовать знак доллара. $
характер.git branch pew$ign
создам скамью. Чтобы создать ветку с$
внутри него все имя должно быть заключено в кавычки:git branch 'pewSign'
. В идеале вам следует избегать использования этого символа.
Чтобы завершить основной ответ Маноджа Говиндана :
-
@
является допустимым именем ветки (в версии gitgit version 2.24.3 (Apple Git-128)
) -
HEAD
не является допустимым именем ветки (очевидно капитаном!) - длина ограничена (ОС, в Mac OS 10.15.7 максимум 250 символов, либо ascii, либо не-ascii)