Какие символы недопустимы в имени ветви?

Какие символы недопустимы в имени ветви?

5 ответов

Решение

Правила именования

Git устанавливает следующие правила именования ссылок:

  1. Они могут включать слэш / для иерархической (директории) группировки, но ни один компонент, разделенный косой чертой, не может начинаться с точки . или конец последовательности .lock,

  2. Они должны содержать хотя бы один /, Это обеспечивает наличие такой категории, как heads/, tags/ и т.д., но фактические имена не ограничены. Если --allow-onelevel опция используется, это правило отменено.

  3. У них не может быть двух последовательных точек .. в любом месте.

  4. Они не могут иметь управляющие символы ASCII (т. Е. Байты, значения которых меньше, чем \040, или же \177DEL), космос, тильда ~, карета ^ или двоеточие : в любом месте.

  5. У них не может быть знака вопроса ?, звездочка * или открытая скобка [ в любом месте. Увидеть --refspec-pattern Вариант ниже для исключения из этого правила.

  6. Они не могут начинаться или заканчиваться косой чертой / или содержат несколько последовательных слешей (см. --normalize вариант ниже для исключения из этого правила)

  7. Они не могут заканчиваться точкой ..

  8. Они не могут содержать последовательность @{,

  9. Они не могут быть одним персонажем @,

  10. Они не могут содержать \,

Спасибо 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'. В идеале вам следует избегать использования этого символа.

Чтобы завершить основной ответ Маноджа Говиндана :

  • @является допустимым именем ветки (в версии git git version 2.24.3 (Apple Git-128))
  • HEADне является допустимым именем ветки (очевидно капитаном!)
  • длина ограничена (ОС, в Mac OS 10.15.7 максимум 250 символов, либо ascii, либо не-ascii)

Ему не нравится > или ==> или ->

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