Spec-Zone.ru › Git

git-check-ref-формат

Имя

git-check-ref-формат - Обеспечивает правильность имени ссылки

Синопсис

git check-ref-format [--normalize]
       [--[no-]allow-onelevel] [--refspec-pattern]
       <refname>
git check-ref-format --branch <branchname-shorthand>

Описание

Проверяет, является ли заданное refname допустимым, и завершается с ненулевым статусом, если нет.

Ссылка используется в Git для указания ветвей и тегов. Голова ветви хранится в иерархии refs/heads, а тег — в иерархии refs/tags пространства имён ссылок (обычно в каталогах $GIT_DIR/refs/heads и $GIT_DIR/refs/tags или, как записи в файле $GIT_DIR/packed-refs, если ссылки упакованы с помощью git gc).

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

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

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

  3. Они не могут содержать две точки подряд ...

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

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

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

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

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

  9. Они не могут состоять из единственного символа @.

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

Эти правила облегчают обработку имён ссылок для инструментов на основе скриптов оболочки, расширение путей оболочкой, когда имя ссылки используется без кавычек (по ошибке), а также предотвращают неоднозначность в некоторых выражениях имён ссылок (см. gitrevisions[7]):

  1. Двойная точка .. часто используется, как в ref1..ref2, и в некоторых контекстах это обозначение означает ^ref1 ref2 (т. е. не в ref1 и не в ref2).

  2. Тильда ~ и знак вставки ^ используются для введения постфикса nth parent и операции peel onion.

  3. Двоеточие : используется, как в srcref:dstref для обозначения «использовать значение srcref и сохранить его в dstref» в операциях fetch и push. Он также может использоваться для выбора конкретного объекта, например, с помощью 'git cat-file': "git cat-file blob v1.3.3:refs.c".

  4. Знак @ с открывающей фигурной скобкой @{ используется как обозначение для доступа к записи reflog.

С опцией --branch, команда принимает имя и проверяет, может ли оно использоваться в качестве допустимого имени ветви (например, при создании новой ветви). Но будьте осторожны при использовании предыдущего синтаксиса проверки, который может ссылаться на состояние HEAD, отвязанное от ветви. Правило git check-ref-format --branch $name может быть строже, чем то, что говорит git check-ref-format refs/heads/$name (например, дефис может появляться в начале компонента ссылки, но он явно запрещён в начале имени ветви). При выполнении с опцией --branch в репозитории входные данные сначала расширяются для синтаксиса «предыдущей проверки» @{-n}. Например, @{-1} — способ сослаться на последнее проверенное состояние с помощью операции "git switch" или "git checkout". Эта опция должна использоваться инструментами для поддержки этого синтаксиса там, где ожидается имя ветви, чтобы они могли действовать так, как будто вы ввели имя ветви. В качестве исключения обратите внимание на то, что «предыдущая операция проверки» может привести к имени объекта коммита, если N-й последний проверенный элемент не был ветвью.

Опции

--[no-]allow-onelevel

Управляет тем, принимаются ли имена ссылок с одним уровнем (т. е. имена ссылок, не содержащие нескольких компонентов, разделённых /). По умолчанию --no-allow-onelevel.

--refspec-pattern

Интерпретировать <refname> как шаблон имени ссылки для refspec (как используется с удалёнными репозиториями). Если эта опция включена, <refname> разрешается содержать один * в refspec (например, foo/bar*/baz или foo/bar*baz/, но не foo/bar*/baz*).

--normalize

Нормализовать refname, удалив любой ведущий слеш (/) и объединив последовательности смежных слешей между компонентами имени в один слеш. Если нормализованное имя ссылки является допустимым, выведите его в стандартный вывод и завершите с кодом состояния 0, в противном случае завершите с ненулевым кодом состояния. (--print — устаревший способ написания --normalize.)

Примеры

  • Вывод имени предыдущего проверенного элемента:

    $ git check-ref-format --branch @{-1}
  • Определение имени ссылки для новой ветви:

    $ ref=$(git check-ref-format --normalize "refs/heads/$newbranch")||
    { echo "we do not like '$newbranch' as a branch name." >&2 ; exit 1 ; }

check-ref-формат

© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-check-ref-format

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API