什么名称是有效的git标签?

Aik*_*Aik 64 git git-tag

创建包含[字符的标记时出现错误消息:

致命:'['不是有效的标签名称.

问题:git中有标签的规则吗?

Wil*_*sem 86

您可以检查名称是否有效

git check-ref-format
Run Code Online (Sandbox Code Playgroud)

页面包含有效名称的约束.从页面引用(可能在将来过时):

  1. 它们可以包括/用于分层(目录)分组的斜杠,但是没有斜杠分隔的组件可以以点.或结束序列开头.lock.

  2. 它们必须包含至少一个/.这强制存在类似的类别等heads/,tags/但实际名称不受限制.如果使用该--allow-onelevel选项,则放弃此规则.

  3. 他们不能在..任何地方连续两个点.

  4. 它们不能具有ASCII控制字符(即值小于\ 040或\ 177的字节DEL),空格,波浪号~,插入符号^或冒号:.

  5. 它们不能在任何地方都有问号?,星号*或开括号[.有关--refspec-pattern此规则的例外情况,请参阅下面的选项.

  6. 它们不能以斜杠开头或结尾,也不能/包含多个连续斜杠(有关--normalize此规则的例外情况,请参阅下面的选项)

  7. 它们不能以点结尾..

  8. 它们不能包含序列@{.

  9. 他们不能是单一的角色@.

  10. 他们不能包含\.

如您所见,在您的情况下,您违反了规则(5).

您可以使用该--normalize标志来标记与斜杠相关的标记(删除前导斜杠以及连续斜杠):

git check-ref-format --normalize "tags/weird//tag"
Run Code Online (Sandbox Code Playgroud)

tags/您正在验证的部分物种tag.

在与@NikosAlexandris进行一些讨论之后,您可以编写以下一个衬垫来检查<some-tag>带有文本反馈的标签:

git check-ref-format "tags/<some-tag>" && echo "Valid tag" || echo "Invalid tag"
Run Code Online (Sandbox Code Playgroud)

  • @WillemVanOnsem 为了简单起见,大多数人如果只是将标签输入 GitHub 或使用 git 推送标签,则不需要遵循规则 2。所以我必须从“外行术语”的角度同意亚瑟的观点。 (4认同)
  • **为什么** git会对标签名称施加这些**限制** (3认同)
  • @user3245268:因为例如你可以引用`remote/branch`,或者`HEAD^1`(获取头部的最后一次提交)等。毕竟,标签只是一个“特殊名称”一次提交。因此,为了使标记、远程分支、相对路径等之间的引用无歧义,名称受到限制。例如,在 Windows 上,您可以不命名文件 `..`,因为这样路径 `../foo` 就会有一些严重的问题。Unix 通常通过转义来解决这个问题,但这里“标签空间”、“分支空间”、“相对提交空间”是“合并的”。 (3认同)
  • 规则2是错误的。例如 `v1.4` 是一个有效的标签,被版本 2.21.0 接受。请参阅 [Git 基础知识 - 标记](https://git-scm.com/book/en/v2/Git-Basics-Tagging)。 (3认同)