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 накладывает следующие правила на именование ссылок:
-
Они могут содержать слеши
/для иерархической (каталогной) группировки, но ни один компонент, разделенный слешем, не может начинаться с точки.или заканчиваться последовательностью.lock. -
Они должны содержать по крайней мере один
/. Это обеспечивает наличие категории, такой какheads/,tags/и т. д., но фактические имена не ограничены. Если используется опция--allow-onelevel, это правило отменяется. -
Они не могут содержать две точки подряд
... -
Они не могут содержать управляющие символы ASCII (т. е. байты, значения которых меньше \040 или \177
DEL), пробелы, тильды~, знаки вставки^, или двоеточия:. -
Они не могут содержать знак вопроса
?, звездочку*, или открытую скобку[. См. опцию--refspec-patternниже для исключения из этого правила. -
Они не могут начинаться или заканчиваться слешем
/или содержать несколько последовательных слешей (см. опцию--normalizeниже для исключения из этого правила). -
Они не могут заканчиваться точкой
.. -
Они не могут содержать последовательность
@{. -
Они не могут состоять из единственного символа
@. -
Они не могут содержать
\.
Эти правила облегчают обработку имён ссылок для инструментов на основе скриптов оболочки, расширение путей оболочкой, когда имя ссылки используется без кавычек (по ошибке), а также предотвращают неоднозначность в некоторых выражениях имён ссылок (см. gitrevisions[7]):
-
Двойная точка
..часто используется, как вref1..ref2, и в некоторых контекстах это обозначение означает^ref1 ref2(т. е. не вref1и не вref2). -
Тильда
~и знак вставки^используются для введения постфиксаnth parentи операцииpeel onion. -
Двоеточие
:используется, как вsrcref:dstrefдля обозначения «использовать значение srcref и сохранить его в dstref» в операциях fetch и push. Он также может использоваться для выбора конкретного объекта, например, с помощью 'git cat-file': "git cat-file blob v1.3.3:refs.c". -
Знак @ с открывающей фигурной скобкой
@{используется как обозначение для доступа к записи 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