Русский ▾ Topics ▾ Latest version ▾ git-check-ref-format last updated in 2.52.0

НАЗВАНИЕ

git-check-ref-format — проверка корректности имени ссылки

ОБЗОР

git check-ref-format [--normalize]
       [--[no-]allow-onelevel] [--refspec-pattern]
       <имя-ссылки>
git check-ref-format --branch <краткая-форма-имени-ветки>

ОПИСАНИЕ

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

Ссылка используется в 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. Тильда ~ и символ крышки ^ используются для введения постфиксных операций n-й родитель и снятие шелухи.

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

  4. @{ используется как обозначение для доступа к записи журнала ссылок.

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

ПАРАМЕТРЫ

--allow-onelevel
--no-allow-onelevel

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

--refspec-pattern

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

--normalize

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

ПРИМЕРЫ

  • Вывести имя предыдущего переключённого объекта:

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

    $ ссылка=$(git check-ref-format --normalize "refs/heads/$новая_ветка")||
    { echo "нам не нравится '$новая_ветка' в качестве имени ветки." >&2 ; exit 1 ; }

GIT

Является частью пакета git[1]