Я отримав повідомлення про помилку під час створення тегу, що містить [
символ:
fatal: '[' не є дійсним ім'ям тегу.
Запитання: чи існують правила для тегів у git?
Відповіді:
Ви можете перевірити, чи справжнє ім'я за допомогою
git check-ref-format
Ця сторінка містить обмеження щодо дійсного імені. Цитата зі сторінки (можливо, застаріла в майбутньому):
Вони можуть містити скісну риску
/
для ієрархічного (каталогового) групування, але жоден розділений косою рисою компонент не може починатися з крапки.
або закінчуватися послідовністю.lock
.Вони повинні містити принаймні один
/
. Це підсилює присутність категорії , якheads/
, іtags/
т.д. , але фактичні імена не обмежені. Якщо використовується--allow-onelevel
опція, це правило скасовується.Вони не можуть мати
..
ніде двох послідовних крапок .Вони не можуть мати контрольних символів ASCII (тобто байтів, значення яких нижчі за \ 040 або \ 177
DEL
), пробілу, тильди~
, символу введення^
або двокрапки:
.Вони не можуть ніде мати знак запитання
?
, зірочку*
або відкриту дужку[
. Див.--refspec-pattern
Варіант нижче для винятку з цього правила.Вони не можуть починатися чи закінчуватися косою рисою
/
або містити кілька послідовних скісних рисок (--normalize
виняток із цього правила див. Нижче)Вони не можуть закінчуватися крапкою
.
.Вони не можуть містити послідовність
@{
.Вони не можуть бути єдиним персонажем
@
.Вони не можуть містити a
\
.
Як бачите, у вашому випадку ви порушили правило (5).
Ви можете використовувати --normalize
прапор для нормалізації тегів щодо косих рисок (видалення провідних скісних рисок, а також послідовних):
git check-ref-format --normalize "tags/weird//tag"
У tags/
вигляді частини , які ви перевірка достовірність tag
.
Після обговорення з @NikosAlexandrisris, ви можете написати наступний лайнер, щоб перевірити тег <some-tag>
із текстовими відгуками:
git check-ref-format "tags/<some-tag>" && echo "Valid tag" || echo "Invalid tag"
remote/branch
, або HEAD^1
(щоб отримати один, але останній коміт голови) тощо. Зрештою, тег - це просто "спеціальне ім'я" для коміту. Отже, щоб зробити посилання однозначним між тегом, віддаленою гілкою, відносним шляхом тощо, імена обмежені. Наприклад, у Windows ви не можете називати файл ..
, оскільки тоді шлях ../foo
матиме серйозні проблеми. Unix зазвичай вирішує це за допомогою екранування, але тут "простір тегів", "простір гілок", "відносний простір комітів" "об'єднано".
v1.4
, дійсний тег, прийнятий версією 2.21.0. Див. Основи Git - позначення .
refs/tags/v1.4
, зверніть увагу, що git додає його до refs/tags/
.