You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
299 lines
9.3 KiB
299 lines
9.3 KiB
git-tag(1) |
|
========== |
|
|
|
NAME |
|
---- |
|
git-tag - Create, list, delete or verify a tag object signed with GPG |
|
|
|
|
|
SYNOPSIS |
|
-------- |
|
[verse] |
|
'git tag' [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] |
|
<tagname> [<commit> | <object>] |
|
'git tag' -d <tagname>... |
|
'git tag' [-n[<num>]] -l [--contains <commit>] [--points-at <object>] |
|
[--column[=<options>] | --no-column] [<pattern>...] |
|
[<pattern>...] |
|
'git tag' -v <tagname>... |
|
|
|
DESCRIPTION |
|
----------- |
|
|
|
Add a tag reference in `refs/tags/`, unless `-d/-l/-v` is given |
|
to delete, list or verify tags. |
|
|
|
Unless `-f` is given, the named tag must not yet exist. |
|
|
|
If one of `-a`, `-s`, or `-u <key-id>` is passed, the command |
|
creates a 'tag' object, and requires a tag message. Unless |
|
`-m <msg>` or `-F <file>` is given, an editor is started for the user to type |
|
in the tag message. |
|
|
|
If `-m <msg>` or `-F <file>` is given and `-a`, `-s`, and `-u <key-id>` |
|
are absent, `-a` is implied. |
|
|
|
Otherwise just a tag reference for the SHA1 object name of the commit object is |
|
created (i.e. a lightweight tag). |
|
|
|
A GnuPG signed tag object will be created when `-s` or `-u |
|
<key-id>` is used. When `-u <key-id>` is not used, the |
|
committer identity for the current user is used to find the |
|
GnuPG key for signing. The configuration variable `gpg.program` |
|
is used to specify custom GnuPG binary. |
|
|
|
|
|
OPTIONS |
|
------- |
|
-a:: |
|
--annotate:: |
|
Make an unsigned, annotated tag object |
|
|
|
-s:: |
|
--sign:: |
|
Make a GPG-signed tag, using the default e-mail address's key. |
|
|
|
-u <key-id>:: |
|
--local-user=<key-id>:: |
|
Make a GPG-signed tag, using the given key. |
|
|
|
-f:: |
|
--force:: |
|
Replace an existing tag with the given name (instead of failing) |
|
|
|
-d:: |
|
--delete:: |
|
Delete existing tags with the given names. |
|
|
|
-v:: |
|
--verify:: |
|
Verify the gpg signature of the given tag names. |
|
|
|
-n<num>:: |
|
<num> specifies how many lines from the annotation, if any, |
|
are printed when using -l. |
|
The default is not to print any annotation lines. |
|
If no number is given to `-n`, only the first line is printed. |
|
If the tag is not annotated, the commit message is displayed instead. |
|
|
|
-l <pattern>:: |
|
--list <pattern>:: |
|
List tags with names that match the given pattern (or all if no |
|
pattern is given). Running "git tag" without arguments also |
|
lists all tags. The pattern is a shell wildcard (i.e., matched |
|
using fnmatch(3)). Multiple patterns may be given; if any of |
|
them matches, the tag is shown. |
|
|
|
--column[=<options>]:: |
|
--no-column:: |
|
Display tag listing in columns. See configuration variable |
|
column.tag for option syntax.`--column` and `--no-column` |
|
without options are equivalent to 'always' and 'never' respectively. |
|
+ |
|
This option is only applicable when listing tags without annotation lines. |
|
|
|
--contains <commit>:: |
|
Only list tags which contain the specified commit. |
|
|
|
--points-at <object>:: |
|
Only list tags of the given object. |
|
|
|
-m <msg>:: |
|
--message=<msg>:: |
|
Use the given tag message (instead of prompting). |
|
If multiple `-m` options are given, their values are |
|
concatenated as separate paragraphs. |
|
Implies `-a` if none of `-a`, `-s`, or `-u <key-id>` |
|
is given. |
|
|
|
-F <file>:: |
|
--file=<file>:: |
|
Take the tag message from the given file. Use '-' to |
|
read the message from the standard input. |
|
Implies `-a` if none of `-a`, `-s`, or `-u <key-id>` |
|
is given. |
|
|
|
--cleanup=<mode>:: |
|
This option sets how the tag message is cleaned up. |
|
The '<mode>' can be one of 'verbatim', 'whitespace' and 'strip'. The |
|
'strip' mode is default. The 'verbatim' mode does not change message at |
|
all, 'whitespace' removes just leading/trailing whitespace lines and |
|
'strip' removes both whitespace and commentary. |
|
|
|
<tagname>:: |
|
The name of the tag to create, delete, or describe. |
|
The new tag name must pass all checks defined by |
|
linkgit:git-check-ref-format[1]. Some of these checks |
|
may restrict the characters allowed in a tag name. |
|
|
|
CONFIGURATION |
|
------------- |
|
By default, 'git tag' in sign-with-default mode (-s) will use your |
|
committer identity (of the form "Your Name <your@email.address>") to |
|
find a key. If you want to use a different default key, you can specify |
|
it in the repository configuration as follows: |
|
|
|
------------------------------------- |
|
[user] |
|
signingkey = <gpg-key-id> |
|
------------------------------------- |
|
|
|
|
|
DISCUSSION |
|
---------- |
|
|
|
On Re-tagging |
|
~~~~~~~~~~~~~ |
|
|
|
What should you do when you tag a wrong commit and you would |
|
want to re-tag? |
|
|
|
If you never pushed anything out, just re-tag it. Use "-f" to |
|
replace the old one. And you're done. |
|
|
|
But if you have pushed things out (or others could just read |
|
your repository directly), then others will have already seen |
|
the old tag. In that case you can do one of two things: |
|
|
|
. The sane thing. |
|
Just admit you screwed up, and use a different name. Others have |
|
already seen one tag-name, and if you keep the same name, you |
|
may be in the situation that two people both have "version X", |
|
but they actually have 'different' "X"'s. So just call it "X.1" |
|
and be done with it. |
|
|
|
. The insane thing. |
|
You really want to call the new version "X" too, 'even though' |
|
others have already seen the old one. So just use 'git tag -f' |
|
again, as if you hadn't already published the old one. |
|
|
|
However, Git does *not* (and it should not) change tags behind |
|
users back. So if somebody already got the old tag, doing a |
|
'git pull' on your tree shouldn't just make them overwrite the old |
|
one. |
|
|
|
If somebody got a release tag from you, you cannot just change |
|
the tag for them by updating your own one. This is a big |
|
security issue, in that people MUST be able to trust their |
|
tag-names. If you really want to do the insane thing, you need |
|
to just fess up to it, and tell people that you messed up. You |
|
can do that by making a very public announcement saying: |
|
|
|
------------ |
|
Ok, I messed up, and I pushed out an earlier version tagged as X. I |
|
then fixed something, and retagged the *fixed* tree as X again. |
|
|
|
If you got the wrong tag, and want the new one, please delete |
|
the old one and fetch the new one by doing: |
|
|
|
git tag -d X |
|
git fetch origin tag X |
|
|
|
to get my updated tag. |
|
|
|
You can test which tag you have by doing |
|
|
|
git rev-parse X |
|
|
|
which should return 0123456789abcdef.. if you have the new version. |
|
|
|
Sorry for the inconvenience. |
|
------------ |
|
|
|
Does this seem a bit complicated? It *should* be. There is no |
|
way that it would be correct to just "fix" it automatically. |
|
People need to know that their tags might have been changed. |
|
|
|
|
|
On Automatic following |
|
~~~~~~~~~~~~~~~~~~~~~~ |
|
|
|
If you are following somebody else's tree, you are most likely |
|
using remote-tracking branches (`refs/heads/origin` in traditional |
|
layout, or `refs/remotes/origin/master` in the separate-remote |
|
layout). You usually want the tags from the other end. |
|
|
|
On the other hand, if you are fetching because you would want a |
|
one-shot merge from somebody else, you typically do not want to |
|
get tags from there. This happens more often for people near |
|
the toplevel but not limited to them. Mere mortals when pulling |
|
from each other do not necessarily want to automatically get |
|
private anchor point tags from the other person. |
|
|
|
Often, "please pull" messages on the mailing list just provide |
|
two pieces of information: a repo URL and a branch name; this |
|
is designed to be easily cut&pasted at the end of a 'git fetch' |
|
command line: |
|
|
|
------------ |
|
Linus, please pull from |
|
|
|
git://git..../proj.git master |
|
|
|
to get the following updates... |
|
------------ |
|
|
|
becomes: |
|
|
|
------------ |
|
$ git pull git://git..../proj.git master |
|
------------ |
|
|
|
In such a case, you do not want to automatically follow the other |
|
person's tags. |
|
|
|
One important aspect of git is its distributed nature, which |
|
largely means there is no inherent "upstream" or |
|
"downstream" in the system. On the face of it, the above |
|
example might seem to indicate that the tag namespace is owned |
|
by the upper echelon of people and that tags only flow downwards, but |
|
that is not the case. It only shows that the usage pattern |
|
determines who are interested in whose tags. |
|
|
|
A one-shot pull is a sign that a commit history is now crossing |
|
the boundary between one circle of people (e.g. "people who are |
|
primarily interested in the networking part of the kernel") who may |
|
have their own set of tags (e.g. "this is the third release |
|
candidate from the networking group to be proposed for general |
|
consumption with 2.6.21 release") to another circle of people |
|
(e.g. "people who integrate various subsystem improvements"). |
|
The latter are usually not interested in the detailed tags used |
|
internally in the former group (that is what "internal" means). |
|
That is why it is desirable not to follow tags automatically in |
|
this case. |
|
|
|
It may well be that among networking people, they may want to |
|
exchange the tags internal to their group, but in that workflow |
|
they are most likely tracking each other's progress by |
|
having remote-tracking branches. Again, the heuristic to automatically |
|
follow such tags is a good thing. |
|
|
|
|
|
On Backdating Tags |
|
~~~~~~~~~~~~~~~~~~ |
|
|
|
If you have imported some changes from another VCS and would like |
|
to add tags for major releases of your work, it is useful to be able |
|
to specify the date to embed inside of the tag object; such data in |
|
the tag object affects, for example, the ordering of tags in the |
|
gitweb interface. |
|
|
|
To set the date used in future tag objects, set the environment |
|
variable GIT_COMMITTER_DATE (see the later discussion of possible |
|
values; the most common form is "YYYY-MM-DD HH:MM"). |
|
|
|
For example: |
|
|
|
------------ |
|
$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1 |
|
------------ |
|
|
|
include::date-formats.txt[] |
|
|
|
SEE ALSO |
|
-------- |
|
linkgit:git-check-ref-format[1]. |
|
|
|
GIT |
|
--- |
|
Part of the linkgit:git[1] suite
|
|
|