Git 리포지토리의 모든 태그를 생성 날짜별로 어떻게 나열합니까?


128

시스템의 모든 태그를 생성 날짜별로 나열하는 방법이 필요하지만 git-log를 통해 해당 데이터를 가져올 수 있는지 확실하지 않습니다. 아이디어?


2
생성 날짜 순서대로 모든 태그 목록을 가져 오려고합니까?
lithuak

3
참고로 (1.) 이 질문 은 날짜별로 주석이 달린 태그를 나열하기위한 것입니다. (2.) 날짜별로 LIGHTWEIGHT 태그를 나열하려면 여기로 이동하십시오 . (3.) Git의 경량 태그와 주석이 달린 태그의 차이점에 대한 유용한 알림을 보려면 여기로 이동하십시오 .
Trevor Boyd Smith

@TrevorBoydSmith : 정확하지 않습니다. 차이점은 (2)는 태그가 지정된 커밋커밋 날짜 별로 모든 태그를 나열 하지만이 페이지는 태그가 지정된 날짜 만 정렬하는 솔루션을 제공한다는 점입니다 (git은 가벼운 태그에 태그가 지정된 날짜를 저장하지 않기 때문에 주석이 달린 태그에 대해서만).
David P

답변:


174

태그 생성 날짜를 기준으로 정렬하면 주석이 달린 가벼운 태그에서 작동합니다.

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

12
대박. git for-each-ref --format="%(taggerdate): %(refname)" --sort=-taggerdate --count=10 refs/tags내가 필요한 것을 정확하게했다. 감사!
Jon Ursenbach

21
경량 태그를 작동 @DrorCohen에 의한 솔루션 : stackoverflow.com/questions/6900328/... . 쉽게 참조 할 수 있도록 여기에 붙여 넣기 : git log --tags --simplify-by-decoration --pretty = "format : % ai % d"
Gilead

5
%(contents)필요한 경우 주석을 추가하는 데 사용할 수 있습니다 . 예 :git for-each-ref --sort='*authordate' --format='%(taggerdate:short) | %(tag) | %(contents)' refs/tags
Tim Diggins

7
또는 조금 더 깨끗한 :git for-each-ref --sort=taggerdate --format '%(tag)'
Baris Wanschers

4
--sort=creatordate주석이 달린 태그와 주석이없는 태그 모두에서 작동하지만 --sort=taggerdate주석이 달린 태그에서만 작동하는 것 같습니다. git version 2.16.3
austinheiman

56

Git 2.8 (2016 년 3 월) 은 git 1.4.4 (Oct2006)로 거슬러 올라가는 또 다른 옵션을 설명 합니다. Eric Wong ( )의 commit e914ef0 (2016 년 1 월 5 일)을
참조하십시오 . ( Junio ​​C Hamano의해 병합 -- 커밋 108cb77 , 2016 년 1 월 20 일)ele828
gitster

새로운 것을보십시오 Documentation/git-for-each-ref.txt

커밋 및 태그 객체의 경우 특수 creatordatecreator 필드는 객체 유형에 따라 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 

" rc-XYZW 형식의 버전 문자열 순서로 git 태그를 정렬하는 방법? "에서 자세히 설명했듯이git tag (Git 2.0 2014 년 6 월부터) 정렬 순서를 추가 할 수 있습니다 .

이 정렬 순서에는 필드 이름 (으로 나열 됨 git for-each-ref)으로 taggerdate가 포함 됩니다. 즉, 허용 git tag --sort=taggerdate(언급 DarVar 이하 )
에서, 예를 들어 git/gitREPO 가 나열한다 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

고마워 왜 날짜가 비어 있는지 궁금했습니다. 나는 이미 가벼운 태그를 의심하고있었습니다. 덕분에 태그를 다시 만들 필요가 없어서 기쁩니다 creatordate!
exhuma

35
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 log --tags --simplify-by-decoration --pretty="format:%ci %d" | grep "tag:"그것은 나를 위해 가장 잘 작동합니다.
Mateusz

1
이는 태그가 작성된 날짜가 아니라 커밋 날짜에 따라 정렬됩니다. Josh Lee의 (현재) 최고 평점 답변은 태그가 작성된 날짜순으로 주문됩니다.
Nathanial Woolls

13
git tag --sort=-taggerdate

매뉴얼 페이지에 따르면 "접두사-값의 내림차순으로 정렬합니다."

git taggit-for-each-ref키가 문서화 되어있는와 동일한 정렬 키를 사용합니다 .


1
이것은 아마도 질문에 따라 가장 정확할 것입니다. 다음은 가능한 정렬 필드를 설명하는 문서 링크입니다 : git-scm.com/docs/git-for-each-ref
prasanthv

이 응답에는 빈 "태그 날짜"가 있으므로 경량 태그는 고려하지 않습니다. "creatordate"에 대한 다른 응답이 더 정확합니다.
morhook

13

이 단일 라이너는 소란없이 날짜와 태그를 표시합니다.

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 답변 을 참조하십시오.


이 멋진 방법이 날짜별로 정렬됩니까? 오름차순? 내림차순?
Motti Shneor

11

커밋 날짜를 기준으로 주석이 달린 태그와 경량 태그를 모두 정렬하려면 다음을 사용합니다.

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

이 명령은 모든 태그와 관련 커밋 객체 ID를 시간순으로 나열합니다.


약간 난독 화. ... 주석이 달린 태그에서는 'committerdate'가 비어 있고 경량 태그에서는 'taggerdate'가 비어 있습니다. 따라서 해결 방법 '* committerdate'는 Git에게 경량 일 때 원래 커밋 객체의 날짜를 역 참조하도록 지시합니다. ...
ingyhere

대신 'creatordate'를 사용하면 효과적으로 동일한 작업을 수행해야합니다.
ingyhere


5

다음은 커밋에 의존하므로 커밋에 날짜 정보가 있는지 여부는 중요하지 않습니다.

git log --tags --decorate --simplify-by-decoration|grep ^commit|grep tag|sed -e 's/^.*: //' -e 's/)$//' -e 's/,.*$//'|tac

Josh Lee의 위의 답변은 주문을 올바르게하기 위해 태그 날짜를 사용합니다.


후행 명령 tac이 무엇인지 확실하지 않으면 -로 변경 될 수 있습니다 more. 어쨌든 당신의 명령은 훌륭하게 작동했습니다-감사합니다!
David H


3

앞에서 언급 한 방법을 바탕으로 목록에서 실제 태그 날짜도보고 싶었습니다. 따라서 사용중인 버전은 다음과 같습니다.

git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(creatordate:short) %(refname) %(*objectname) %(objectname)' refs/tags | sort -n | awk '{ print $3, $5, $4 }'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.