`git tag 'сортируется в хронологическом порядке даты фиксации, указанной в

Вывод git tag упорядочен по алфавиту. Я хотел бы, чтобы он был упорядочен в хронологическом порядке (дата коммитов, которым они назначены, а не дата, когда они были созданы), в противном случае выходные данные должны остаться неизменными.

Я попробовал предложение от http://networkadmin20.blogspot.de/2010/08/howto-list-git-tags-by-date.html, но порядок все тот же.

Чтобы убедиться, что это не ошибка моего репозитория, я попробовал следующее с чистым репозиторием:

[email protected] ~/Projects/sandbox % mkdir chronogit
[email protected] ~/Projects/sandbox % cd chronogit 
[email protected] ~/Projects/sandbox/chronogit % git init
Initialized empty Git repository in /home/soeren/Projects/sandbox/chronogit/.git/
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % touch a
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git add a
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'a'
[master (root-commit) f88e0e9] a
 0 files changed
 create mode 100644 a
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git tag 'A-first'
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git mv a b
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'c'
[master ecc0c08] c
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a => b (100%)
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git tag 'C-second'
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git mv b c
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'b'
[master e72682d] b
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename b => c (100%)
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git tag 'B-third'
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git tag
A-first
B-third
C-second
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git for-each-ref refs/tags --sort=taggerdate --format="%(refname:short)"
A-first
B-third
C-second

Желаемый результат:

A-first
C-second
B-third

или, поскольку инвертирование не должно быть слишком сложным:

B-third
C-second
A-first

Изменить: как указано в комментариях, этот вопрос довольно похож, поэтому я попробовал следующее:

[email protected] ~/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)

Порядок в порядке, но теперь я борюсь с форматированием...

[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git log --tags --simplify-by-decoration --pretty="format:%(refname:short)"
%(refname:short)
%(refname:short)
%(refname:short)
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git log --tags --simplify-by-decoration --format="%(refname:short)" 
%(refname:short)
%(refname:short)
%(refname:short)

Ответы

Ответ 1

git tag | xargs [email protected] git log --format=format:"%ai @%n" -1 @ | sort | awk '{print $4}'

Ответ 2

Только что протестировано с git 2.8.0:

git tag --sort=committerdate

Полный список имен полей, которые вы можете использовать, см. По адресу https://git-scm.com/docs/git-for-each-ref#_field_names.

Для объектов commit и tag, специальные creatordate и creator будут соответствовать соответствующей дате или кортежу name-email-date из полей коммиттера или tagger в зависимости от типа объекта. Они предназначены для работы с различными аннотированными и легкими тегами.

Поля, которые имеют имя-почта-дату кортежа в качестве значения (author, committer и tagger) может быть суффикс name, email и date для извлечения имени компоненты.

Ответ 3

В git 2.3.3 Я могу просто сделать это, чтобы отсортировать их по дате:

git tag --sort version:refname

PS: Для записи я также ответил на ту же тему в вопросе duplicate

Ответ 4

git log --date-order --tags --simplify-by-decoration --pretty=format:"%ci %d"

Ответ 6

Как указал Александр, это должно быть

git tag --sort=taggerdate

для правильного хронологического порядка.

редактировать: * если вам интересна дата, когда теги были отправлены, если вас интересует дата коммитов, это должно быть "commiterdate"

Ответ 7

Чтобы получить информацию в обратном порядке, добавьте префикс "-"

git tag --sort=-taggerdate