source

Git 태그의 시간 및 날짜 가져오기

nicesource 2023. 8. 7. 22:36
반응형

Git 태그의 시간 및 날짜 가져오기

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

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

웹 인터페이스에 릴리스 및 릴리스 날짜(태그/커밋 날짜 = 릴리스 날짜)를 나열하는 것이 목표입니다.현재 다음을 사용하여 모든 릴리스를 나열합니다.git tag.

태그가 생성된 날짜(또는 태그가 가리키는 커밋)에 대한 시간과 날짜는 어떻게 얻을 수 있습니까?

이것은 항상 저에게 효과가 있었습니다.

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

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

사용--format에 대한 주장.git log:

git log -1 --format=%ai MY_TAG_NAME

옵션 하나 더:

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'

위의 두 솔루션 모두 커밋 날짜를 제공하며, 커밋이 릴리스 태그가 지정된 날짜와 크게 다를 수 있습니다.태그 자체의 날짜를 얻으려면 태그 자체를 찾아야 합니다.rev-parse로 그것을 읽습니다.cat-file그리고 그것을 구문 분석합니다.약간의 파이프라인:

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

git tag 명령에는 이를 위한 간단한 옵션이 없습니다.나는 달리기가 가장 편리하다고 생각했습니다.

git log --decorate=full

태그를 포함한 모든 커밋을 나열합니다(있는 경우).태그가 지정된 커밋만 나열하는 경우 사용

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

자세한 사용방법

git help log

쓸 수 있는gawk(아닙니다.awk) "태거" 줄의 날짜를 사람이 읽을 수 있는 날짜로 변환하는 방법:

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

마음에 들지 않으면gawk그리고나서dateUNIX 시간을 변환하는 데 사용할 수 있습니다.

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

여기 있는 모든 대답은 훌륭하고 적절한 깃 스타일입니다.하지만 저는 태그, 날짜, 메시지, 그리고 마지막 10개의 태그가 필요했습니다.그래서 저는 그냥 아주 평범한 방법으로 그것을 했습니다.하지만 셸 함수나 스크립트로 저장하면 원라이너가 됩니다.

for ver in `git tag | tail -10`; do
    DATE=`git log -1 --format=%ai $ver | awk '{print $1}'`
    MESSAGE=`git tag -n $ver | cat | awk '{a=match($0, $2); print substr($0,a)}'`
    echo "$ver \t| $DATE | $MESSAGE"
done

언급URL : https://stackoverflow.com/questions/13208734/get-the-time-and-date-of-git-tags

반응형