Ответ 1
git tag | xargs [email protected] git log --format=format:"%ai @%n" -1 @ | sort | awk '{print $4}'
Вывод 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)
git tag | xargs [email protected] git log --format=format:"%ai @%n" -1 @ | sort | awk '{print $4}'
Только что протестировано с 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
,date
для извлечения имени компоненты.
В git 2.3.3 Я могу просто сделать это, чтобы отсортировать их по дате:
git tag --sort version:refname
PS: Для записи я также ответил на ту же тему в вопросе duplicate
git log --date-order --tags --simplify-by-decoration --pretty=format:"%ci %d"
Попробуйте следующее:
git for-each-ref --sort=taggerdate --format '%(refname) %(taggerdate)' refs/tags
Это работает отлично и очень быстро для меня.
Обратитесь к Как я могу перечислить все теги в моем репозитории Git к дате их создания?
Как указал Александр, это должно быть
git tag --sort=taggerdate
для правильного хронологического порядка.
редактировать: * если вам интересна дата, когда теги были отправлены, если вас интересует дата коммитов, это должно быть "commiterdate"
Чтобы получить информацию в обратном порядке, добавьте префикс "-"
git tag --sort=-taggerdate