What names are valid git tags?

GitGit Tag

Git 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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAikView Question on Stackoverflow
Solution 1 - GitWillem Van OnsemView Answer on Stackoverflow
Solution 2 - GitAndrewView Answer on Stackoverflow