The output from git tag
is ordered alphabetically. I would like it to be ordered chronological (the date of the commits they are assigned to, not the date on which they were created), otherwise the output should stay the same.
I’ve tried the suggestion from http://networkadmin20.blogspot.de/2010/08/howto-list-git-tags-by-date.html, but the order is still the same.
To make sure it is not an error with my repository, I tried the following with a clean repository:
soeren@ubuntu ~/Projects/sandbox % mkdir chronogit soeren@ubuntu ~/Projects/sandbox % cd chronogit soeren@ubuntu ~/Projects/sandbox/chronogit % git init Initialized empty Git repository in /home/soeren/Projects/sandbox/chronogit/.git/ soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % touch a soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git add a soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'a' [master (root-commit) f88e0e9] a 0 files changed create mode 100644 a soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git tag 'A-first' soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git mv a b soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'c' [master ecc0c08] c 1 file changed, 0 insertions(+), 0 deletions(-) rename a => b (100%) soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git tag 'C-second' soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git mv b c soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'b' [master e72682d] b 1 file changed, 0 insertions(+), 0 deletions(-) rename b => c (100%) soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git tag 'B-third' soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git tag A-first B-third C-second soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git for-each-ref refs/tags --sort=taggerdate --format="%(refname:short)" A-first B-third C-second
The desired output is:
A-first C-second B-third
or, since inverting it shouldn’t be too hard:
B-third C-second A-first
Edit: As pointed out in the comments, this question is pretty similiar, so I tried the following:
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git log --tags --simplify-by-decoration --pretty="format:%ai %d" 2013-09-06 16:08:43 +0200 (HEAD, B-third, master) 2013-09-06 16:08:21 +0200 (C-second) 2013-09-06 16:07:42 +0200 (A-first)
The order is fine, but now I’m fighting with the formatting…
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git log --tags --simplify-by-decoration --pretty="format:%(refname:short)" %(refname:short) %(refname:short) %(refname:short) soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git log --tags --simplify-by-decoration --format="%(refname:short)" %(refname:short) %(refname:short) %(refname:short)
You can also choose to sort your tags by versions : this way, your tag names will be treated as version numbers. In order to list Git tags sorted by version numbers, you have to use the “git tag” command with the “–sort=version:refname” option and an additional tag pattern.
You can tag a revision right after your commit or later (after a push). Then, you can push your tag with: git push origin [tagname] . So, yes, your sequence is ok.
Just tested with git 2.8.0:
git tag --sort=committerdate
For a full list of field names you can use, see https://git-scm.com/docs/git-for-each-ref#_field_names
For commit and tag objects, the special
creatordate
andcreator
fields will correspond to the appropriate date or name-email-date tuple from the committer or tagger fields depending on the object type. These are intended for working on a mix of annotated and lightweight tags.Fields that have name-email-date tuple as its value (
author
,committer
, andtagger
) can be suffixed withname
,date
to extract the named component.
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