哪些名称是有效的 git 标记?

在创建包含 [字符的标记时,我得到了一个错误消息:

’[’不是一个有效的标记名。

问: 对于 git 中的标记有什么规则吗?

56628 次浏览

You can check if the name is valid with

git check-ref-format

This page contains the constraints on a valid name. Quoted from the page (possibly outdated in the future):

  1. They can include slash / for hierarchical (directory) grouping, but no slash-separated component can begin with a dot . or end with the sequence .lock.

  2. They must contain at least one /. This enforces the presence of a category like heads/, tags/ etc. but the actual names are not restricted. If the --allow-onelevel option is used, this rule is waived.

  3. They cannot have two consecutive dots .. anywhere.

  4. They cannot have ASCII control characters (i.e. bytes whose values are lower than \040, or \177 DEL), space, tilde ~, caret ^, or colon : anywhere.

  5. They cannot have question-mark ?, asterisk *, or open bracket [ anywhere. See the --refspec-pattern option below for an exception to this rule.

  6. They cannot begin or end with a slash / or contain multiple consecutive slashes (see the --normalize option below for an exception to this rule)

  7. They cannot end with a dot ..

  8. They cannot contain a sequence @{.

  9. They cannot be the single character @.

  10. They cannot contain a \.

As you can see, in your case you violated rule (5).

You can use the --normalize flag to normalize tags with respect to slashes (removing leading slashes as well as consecutive ones):

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

The tags/ part species that you are validating a tag.

After some discussion with @NikosAlexandris, you can write the following one liner to check the tag <some-tag> with textual feedback:

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

Disallowed characters: '~', '^', ':', '', '?', '[', '*'

Disallowed sequences ".." and "@{"

This symbols/sequences have special meaning to revparse.


Also tag cannot contain " " (whitespace)

source: https://libgit2.org/libgit2/#HEAD/group/tag/git_tag_create

additional information: https://git-scm.com/docs/git-check-ref-format