What names are valid git tags?
GitGit TagGit Problem Overview
I have got a error message while creating tag containing [
character:
> fatal: '[' is not a valid tag name.
Question: are there any rules for tags in the git?
Git Solutions
Solution 1 - Git
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"
Solution 2 - Git
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