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


78

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

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

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

Answers:


107

您可以使用以下命令检查名称是否有效

git check-ref-format

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

  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"

tags/您要验证的零件种类tag

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

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

为什么git会对标签名称施加这些限制
user3245268 '19

3
@ user3245268:因为例如您可以引用remote/branch,或HEAD^1(获取一个,但最后提交的头部),等等。毕竟,标记只是提交的“特殊名称”。因此,为了使引用在标签,远程分支,相对路径等之间毫无疑问,对名称进行了限制。例如,在Windows上,您可以不命名文件..,因为这样路径../foo会出现一些严重的问题。Unix通常通过转义来解决此问题,但是这里的“标签空间”,“分支空间”,“相对提交空间”是“合并的”。
Willem Van Onsem

规则2是错误的。例如,v1.4是有效的标记,版本2.21.0接受。参见Git基础-标记
亚瑟

@Arthur:否,因为您可以在自己的文档中阅读,如果您这样做就可以定义一个名为的标签refs/tags/v1.4,请注意git前面加上了refs/tags/
Willem Van Onsem

@WillemVanOnsem为了简单起见,如果大多数人只是在GitHub中输入标签或使用git推送标签,则无需遵循规则2。因此,我必须从“外行的条款”这样的立场上同意亚瑟。
哈里森·史密斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.