Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

`git tag` sorted in chronological order of the date of the commit pointed to

Tags:

git

sorting

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) 
like image 202
soerface Avatar asked Sep 06 '13 14:09

soerface


People also ask

How do I sort a git tag?

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.

Do I tag before or after commit?

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.


1 Answers

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 and creator 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, and tagger) can be suffixed with name, email, and date to extract the named component.

like image 84
rraval Avatar answered Sep 27 '22 20:09

rraval