Как я могу перечислить все теги в моем репозитории Git к дате их создания?

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Смотрите новый Documentation/git-for-each-ref.txt

Для объектов commit и tag специальные creatordate и creatorполя будут соответствовать соответствующей дате или кортежу с именем-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 repo он отобразит тег v2.10.0 last:

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

Ответ 4

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

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

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

Ответ 5

Этот однострочный файл отображает даты и теги без каких-либо проблем.

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.

Ответ 6

git tag --sort=-taggerdate

В соответствии с справочной страницей "Префикс - сортировка в порядке убывания значения".

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

Ответ 7

С Git version 2.10.0.windows.1

git tag --sort=taggerdate

Ответ 8

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

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