Мне нужно каким-то образом перечислить все теги в моей системе на дату их создания, но я не уверен, могу ли я получить эти данные через git -log. Идеи?
Как я могу перечислить все теги в моем репозитории Git к дате их создания?
Ответ 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 }'