Как я могу перечислить все теги в моем Git-репозитории по дате их создания? - PullRequest
107 голосов
/ 07 июня 2011

Мне нужен какой-то способ перечислить все теги в моей системе по дате их создания, но я не уверен, смогу ли я получить эти данные через git-log.Идеи?

Ответы [ 9 ]

144 голосов
/ 07 июня 2011

Если это аннотированный тег, вы можете использовать дату тега:

git for-each-ref --sort=taggerdate --format '%(refname) %(taggerdate)' refs/tags

Но если это легкий тег, нет информации о том, когда он был создан (все, что он делает - это имя объекта).

45 голосов
/ 21 января 2016

Git 2.8 (март 2016) документирует другой вариант , начиная с git 1.4.4 (октябрь 2006) .
См. commit e914ef0 (05 января 2016) Эрик Вонг (ele828) .
(Объединено Junio ​​C Hamano - gitster - в коммит 108cb77 , 20 января 2016 г.)

См. Новые Documentation/git-for-each-ref.txt

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

Таким образом, использование creatordate работает с тегами:

git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }' 

Или:

git tag --sort=-creatordate 

Как подробно в " Как сортироватьgit-теги по порядку строк версии в форме rc-XYZW?", вы можете добавить порядок сортировки к git tag (начиная с Git 2.0, июнь 2014 г.).

этот порядок сортировкивключает в себя имя поля (указано в git for-each-ref) taggerdate .Это позволяет git tag --sort=taggerdate (упоминается DarVar ниже )
Например, в git/git репо будет отображаться v2.10.0последний тег:

v2.9.1
v2.9.2
v2.9.3
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.10.0

Порядок по умолчанию не будет (git tag):

v2.1.2
v2.1.3
v2.1.4
v2.10.0
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.2.0
30 голосов
/ 07 апреля 2015
git log --tags --simplify-by-decoration --pretty="format:%ci %d"

Также хороший вывод (без поля даты):

git log --tags --decorate --simplify-by-decoration --oneline

Чтобы просмотреть полную историю с зависимостями и чередующимися линейными фиксациями (только важные события, такие как тегирование и ветвление / слияние):

git log --graph --decorate --simplify-by-decoration --oneline --all
12 голосов
/ 15 июня 2017

Этот однострочник отображает даты и теги без суеты.

git tag --format='%(creatordate:short)%09%(refname:strip=2)'

Вывод:

2015-04-01  storaged-2.0.0
2015-06-11  storaged-2.1.0
2015-08-06  storaged-2.1.1
...

Если вам не нравится, как теги сортируются по умолчанию, вы можетесортировать по дате с опцией --sort=creatordate, например.Подробнее см. VonC answer .

11 голосов
/ 18 июля 2014

Для того, чтобы аннотированные теги и легкие теги были отсортированы в целом по дате фиксации, я использую:

git for-each-ref --format='%(*committerdate:raw)%(committerdate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
  sort -n | awk '{ print $4, $3; }' 

Эта команда выведет список всех тегов и идентификатора связанного объекта фиксации в хронологическом порядке.

9 голосов
/ 03 октября 2016
git tag --sort=-taggerdate

Согласно справочной странице «Префикс - сортировка по убыванию значения».

git tag использует те же ключи сортировки, что и git-for-each-ref, где ключи документированы.

6 голосов
/ 08 сентября 2016

С Git version 2.10.0.windows.1

git tag --sort=taggerdate

4 голосов
/ 09 марта 2018

Следующее опирается на фиксацию, поэтому не имеет значения, есть ли у него информация о дате с фиксацией:

git log --tags --decorate --simplify-by-decoration|grep ^commit|grep tag|sed -e 's/^.*: //' -e 's/)$//' -e 's/,.*$//'|tac

Ответ, приведенный выше Джошем Ли, полагается на дату тега для получения заказа.правильный.

3 голосов
/ 06 ноября 2017

Основываясь на ранее упомянутых методах, я хотел также видеть фактическую дату тега в списке, и поэтому моя используемая версия:

git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(creatordate:short) %(refname) %(*objectname) %(objectname)' refs/tags | sort -n | awk '{ print $3, $5, $4 }'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...