Подтвердить что ты не робот

Какие имена являются действительными тегами git?

У меня есть сообщение об ошибке при создании тега, содержащего символ [:

fatal: '[' не является допустимым именем тега.

Вопрос: существуют ли правила для тегов в git?

4b9b3361

Ответ 1

Вы можете проверить правильность имени с помощью

git check-ref-format

Эта страница содержит ограничения на допустимое имя. Цитируется со страницы (возможно, устаревшей в будущем):

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

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

  • Они не могут иметь две последовательные точки .. где угодно.

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

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

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

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

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

  • Они не могут быть единственным символом @.

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

Как вы можете видеть, в вашем случае вы нарушили правило (5).

Вы можете использовать флаг --normalize для нормализации тегов относительно косой черты (удаление ведущих косых черт, а также последовательных):

git check-ref-format --normalize "tags/weird//tag"

Части tags/, которые вы проверяете tag.

После некоторого обсуждения с @NikosAlexandris вы можете написать следующий один вкладыш, чтобы проверить тег <some-tag> с текстовой обратной связью:

git check-ref-format "tags/<some-tag>" && echo "Valid tag" || echo "Invalid tag!"