Мне нужен какой-то способ перечислить все теги в моей системе по дате их создания, но я не уверен, смогу ли я получить эти данные через git-log.Идеи?
Если это аннотированный тег, вы можете использовать дату тега:
git for-each-ref --sort=taggerdate --format '%(refname) %(taggerdate)' refs/tags
Но если это легкий тег, нет информации о том, когда он был создан (все, что он делает - это имя объекта).
Git 2.8 (март 2016) документирует другой вариант , начиная с git 1.4.4 (октябрь 2006) . См. commit e914ef0 (05 января 2016) Эрик Вонг (ele828) . (Объединено Junio C Hamano - gitster - в коммит 108cb77 , 20 января 2016 г.)
ele828
gitster
См. Новые Documentation/git-for-each-ref.txt
Documentation/git-for-each-ref.txt
Для объектов фиксации и тега специальные поля creatordate и creator будут соответствоватьсоответствующий кортеж date или name-email-date из полей committer или tagger в зависимости от типа объекта. Они предназначены для работы с сочетанием аннотированных и облегченных тегов .
creatordate
creator
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 tag
этот порядок сортировкивключает в себя имя поля (указано в git for-each-ref) taggerdate .Это позволяет git tag --sort=taggerdate (упоминается DarVar ниже ) Например, в git/git репо будет отображаться v2.10.0последний тег:
git for-each-ref
git tag --sort=taggerdate
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
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
Этот однострочник отображает даты и теги без суеты.
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 .
--sort=creatordate
Для того, чтобы аннотированные теги и легкие теги были отсортированы в целом по дате фиксации, я использую:
git for-each-ref --format='%(*committerdate:raw)%(committerdate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \ sort -n | awk '{ print $4, $3; }'
Эта команда выведет список всех тегов и идентификатора связанного объекта фиксации в хронологическом порядке.
git tag --sort=-taggerdate
Согласно справочной странице «Префикс - сортировка по убыванию значения».
git tag использует те же ключи сортировки, что и git-for-each-ref, где ключи документированы.
git-for-each-ref
С Git version 2.10.0.windows.1
version 2.10.0.windows.1
Следующее опирается на фиксацию, поэтому не имеет значения, есть ли у него информация о дате с фиксацией:
git log --tags --decorate --simplify-by-decoration|grep ^commit|grep tag|sed -e 's/^.*: //' -e 's/)$//' -e 's/,.*$//'|tac
Ответ, приведенный выше Джошем Ли, полагается на дату тега для получения заказа.правильный.
Основываясь на ранее упомянутых методах, я хотел также видеть фактическую дату тега в списке, и поэтому моя используемая версия:
git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(creatordate:short) %(refname) %(*objectname) %(objectname)' refs/tags | sort -n | awk '{ print $3, $5, $4 }'