git 태그의 시간과 날짜 가져 오기


88

git을 사용하는 프로젝트가 있고 모든 릴리스에 태그를 지정했습니다.

$ git tag
v1.0.0
v1.0.1
v1.0.2
v1.0.3
v1.1.0

내 목표는 웹 인터페이스에 릴리스 및 릴리스 날짜를 나열하는 것입니다 (태그 / 커밋 날짜 = 릴리스 날짜). 현재 우리는 git tag.

태그가 만들어진 시간과 날짜 (또는 태그가 가리키는 커밋)를 어떻게 얻을 수 있습니까?


2
여기에서 태그의 커밋 날짜를 정확히 지정하는 것이 좋습니다. 태그에는 날짜가 없습니다.
jobwat


답변:


71

--format인수 사용 git log:

git log -1 --format=%ai MY_TAG_NAME

3
팁- "TAG"를 태그 이름으로 바꿉니다. 예 : git log -1 --format=%ai v0.2.3.
Tobias

5
ISO8601을 원하면 --format=%aI(대문자 "I")
Chaim Eliyah

git log -1 --format=%ai MY_TAG_NAME | cat페이지보기 비활성화
elinx

"-1"은 무엇을하고 있습니까?
Blademaster

@Blademaster git log태그와 관련된 하나의 커밋 만 표시하도록 지시 합니다. 기본 동작은 지정된 것부터 복제의 첫 번째 커밋까지의 모든 커밋을 표시하는 것입니다.
user4815162342

83

이것은 항상 나를 위해 일했습니다.

git log --tags --simplify-by-decoration --pretty="format:%ci %d"

다른 날짜 형식을 원하는 경우 형식 문자열에 대한 자세한 내용은 git-log 맨 페이지의 "PRETTY FORMATS"섹션을 참조하십시오.


13
그러나 경고하기 위해 이것은 커밋의 날짜 / 시간을 나열하지만 주석이 달린 태그의 날짜 / 시간은 나열하지 않습니다.
WiSaGaN

5
그냥 넣어 taglog = log --tags --simplify-by-decoration --pretty='format:%ci %d'당신의 .gitconfig 파일의 [별칭] 섹션에 (단일 등급, NOT 따옴표에주의), 그리고 지금 당신은 자식 태그 로그인 명령 :)있어
Lambart

39

하나 더 옵션 :

git for-each-ref --format="%(refname:short) | %(creatordate)" "refs/tags/*"

형식 옵션 은 https://git-scm.com/docs/git-for-each-ref#_field_names 참조

%(creatordate) 사용시 태그가 생성 된 날짜를 확인하기 위해 가리키는 커밋 날짜를 제공합니다. %(taggerdate)

쉘을 직접 통합 할 수 있습니다.

$> git for-each-ref --shell --format="ref=%(refname:short) dt=%(taggerdate:format:%s)" "refs/tags/*"

ref='v1.10' dt='1483807817'
ref='v1.11' dt='1483905854'
ref='v1.12.0' dt='1483974797'
ref='v1.12.1' dt='1484015966'
ref='v1.13' dt='1484766542'
ref='v1.2' dt='1483414377'
ref='v1.3' dt='1483415058'
ref='v1.3-release' dt='' <-- not an annotated tag, just a pointer to a commit so no 'taggerdate', it would have a 'creator date'.
ref='v1.3.1' dt='1483487085'
ref='v1.4' dt='1483730146'
ref='v1.9' dt='1483802985'

3
이것은 태그 날짜를 얻는 가장 좋은 대답입니다.
Joseph K. Strauss

또는git for-each-ref --format="%(taggerdate:unix)" refs/tagsgit for-each-ref --format="%(taggerdate:raw)" refs/tags
RD

1
감사합니다! 다른 모든 답변은 태그 날짜가 아닌 커밋 날짜 만 제공합니다.
Sam

네, 모든 커밋이 아닌 실제 태그 만 표시하므로 베스트 답변이 아닙니다.
samthebest

2
적은 입력과 같은 결과 :git tag --format "%(refname:short) %(creatordate:short)"
앤드류 스펜서

27

위의 두 솔루션 모두 커밋 날짜를 가져 오며, 이는 해당 커밋이 릴리스 용으로 태그 된시기와 크게 다를 수 있습니다. 태그 자체의 날짜를 얻으려면으로 태그 자체를 찾고로 rev-parse읽은 cat-file다음 파싱해야합니다. 약간의 파이프 라인 :

git rev-parse v1.0.0 | xargs git cat-file -p | egrep '^tagger' | cut -f2 -d '>'


결과가 포맷되지 않은 좋은, 유일한 문제가있다 (1419372909 -0300)
Jose_GD

rev-parse에서 커밋 ID를 받으면 다음과 같이 할 수 있습니다. git rev-parse v1.0.0 | xargs git show -s --pretty = % aI
Keith

@Keith 이제 최소한 주석이 달린 태그에 대해 태그가 지정된 날짜 대신 커밋의 작성자 날짜를 표시하는 것으로 돌아 왔습니다.
Ben

3

git tag 명령에는이 작업을 수행하는 간단한 옵션이 없습니다. 나는 달리기가 가장 편리하다는 것을 알았다

git log --decorate=full

태그가있는 경우 모든 커밋을 나열합니다. 태그가 지정된 커밋 만 나열하려면

git log --decorate=full --simplify-by-decoration

자세한 사용

git help log

2

"tagger"줄의 날짜를 사람이 읽을 수있는 것으로 변환 하려면 gawk(아님 awk)을 사용할 수 있습니다 .

git rev-parse v4.4-rc1 | xargs git cat-file -p | gawk '/^tagger/ { print strftime(PROCINFO["strftime"], $(NF-1)) }'

하나 같이하지 않는 경우 gawk다음 date유닉스 시간을 변환 할 수 있습니다 :

git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print "@" $(NF-1) }' | xargs date -d

및 예 ( dnsmasqgit repo) :

$ git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print "@" $(NF-1) }' | xargs date -d
Wed May 18 16:52:12 CEST 2016

당신은 당신 측에서 이것을 시도합니까 ??
Vishal Patel 2015

확실히. 작동합니다. dnsmasqgit repo, 예를 들어 : $ git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print strftime(PROCINFO["strftime"], $(NF-1)) }' Wed May 18 16:52:12 CEST 2016
vladis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.