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?
Tags are ref's that point to specific points in Git history. Tagging is generally used to capture a point in history that is used for a marked version release (i.e. v1. 0.1). A tag is like a branch that doesn't change. Unlike branches, tags, after being created, have no further history of commits.
Git supports two types of tags: lightweight and annotated. A lightweight tag is very much like a branch that doesn't change — it's just a pointer to a specific commit. Annotated tags, however, are stored as full objects in the Git database.
They cannot have two consecutive dots .. anywhere. They cannot have ASCII control characters (i.e. bytes whose values are lower than \040, or \177 DEL ), space, tilde ~ , caret ^ , or colon : anywhere. They cannot have question-mark ? , asterisk * , or open bracket [ anywhere.
List Local Git Tags. In order to list Git tags, you have to use the “git tag” command with no arguments. You can also execute “git tag” with the “-n” option in order to have an extensive description of your tag list. Optionally, you can choose to specify a tag pattern with the “-l” option followed by the tag pattern.
Git supports two types of tags: lightweight and annotated. A lightweight tag is very much like a branch that doesn’t change — it’s just a pointer to a specific commit. Annotated tags, however, are stored as full objects in the Git database.
A common pattern is to use version numbers like git tag v1.4. Git supports two different types of tags, annotated and lightweight tags. The previous example created a lightweight tag.
Suggested best practices for git tagging is to prefer annotated tags over lightweight so you can have all the associated meta-data. Executing this command will create a new annotated tag identified with v1.4. The command will then open up the configured default text editor to prompt for further meta data input.
Now you can check yourself by executing git log --oneline command that the tag creation is successful. Although this command will tag the last commit on the branch dev , you can also tag with a specific commit in Git. How To Tag Specific Commit In Git? For tagging a specific commit, we will make use of the hash code of that particular commit.
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):
They can include slash
/
for hierarchical (directory) grouping, but no slash-separated component can begin with a dot.
or end with the sequence.lock
.They must contain at least one
/
. This enforces the presence of a category likeheads/
,tags/
etc. but the actual names are not restricted. If the--allow-onelevel
option is used, this rule is waived.They cannot have two consecutive dots
..
anywhere.They cannot have ASCII control characters (i.e. bytes whose values are lower than \040, or \177
DEL
), space, tilde~
, caret^
, or colon:
anywhere.They cannot have question-mark
?
, asterisk*
, or open bracket[
anywhere. See the--refspec-pattern
option below for an exception to this rule.They cannot begin or end with a slash
/
or contain multiple consecutive slashes (see the--normalize
option below for an exception to this rule)They cannot end with a dot
.
.They cannot contain a sequence
@{
.They cannot be the single character
@
.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"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With