ฉันจะแสดงรายการแท็กทั้งหมดในที่เก็บ Git ตามวันที่สร้างได้อย่างไร


128

ฉันต้องการวิธีที่จะแสดงรายการแท็กทั้งหมดในระบบของฉันตามวันที่สร้างขึ้น แต่ไม่แน่ใจว่าฉันสามารถรับข้อมูลนั้นผ่าน git-log ได้หรือไม่ ไอเดีย?


2
คุณหมายความว่าคุณต้องการรับรายการแท็กทั้งหมดตามลำดับวันที่สร้างหรือไม่?
lithuak

3
FYI (1. ) คำถามนี้มีไว้สำหรับการแสดงรายการแท็กที่ไม่มีการแจ้งเตือนตามวันที่ (2)สำหรับรายชื่อแท็กน้ำหนักเบาตามวันที่ไปที่นี่ (3)สำหรับการแจ้งเตือนที่เป็นประโยชน์ในสิ่งที่เป็นความแตกต่างระหว่างที่มีน้ำหนักเบา Git ของแท็ก VS ข้อเขียนที่ไปที่นี่
Trevor Boyd Smith

@TrevorBoydSmith: นั่นไม่ถูกต้องนัก ความแตกต่างคือ (2) แสดงรายการแท็กทั้งหมดตามวันที่กำหนดของการกระทำที่ติดแท็กในขณะที่หน้านี้จะให้โซลูชันที่จัดเรียงตามวันที่ที่แท็ก (แม้ว่าจะใช้กับแท็กที่มีคำอธิบายประกอบเท่านั้นเนื่องจาก git ไม่ได้จัดเก็บวันที่ที่แท็กสำหรับแท็กที่มีน้ำหนักเบา)
David P

คำตอบ:


175

การจัดเรียงตามวันที่สร้างแท็กใช้ได้กับแท็กที่มีคำอธิบายประกอบและมีน้ำหนักเบา:

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) เอกสารอีกตัวเลือกที่ย้อนหลังไปถึงคอมไพล์ 1.4.4 (Oct2006)
ดูกระทำ e914ef0 (5 มกราคม 2016) โดยเอริควงศ์ (ele828 )
(รวมโดยJunio C Hamano - gitster-ในการกระทำ 108cb77 , 20 มกราคม 2016)

ดูไฟล์ Documentation/git-for-each-ref.txt

สำหรับอ็อบเจ็กต์คอมมิตและแท็ก ฟิลด์พิเศษ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 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 tagใช้คีย์การเรียงลำดับเดียวกับgit-for-each-refซึ่งเป็นที่จัดเก็บคีย์


1
นี่อาจเป็นคำถามที่ถูกต้องที่สุด นี่คือลิงค์ไปยังเอกสารที่สรุปช่องการจัดเรียงที่เป็นไปได้: git-scm.com/docs/git-for-each-ref
prasanthv

คำตอบนี้ไม่ได้คำนึงถึงแท็กที่มีน้ำหนักเบาเนื่องจากมี "taggerdate" ว่างเปล่า คำตอบอื่น ๆ ที่มี "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; }' 

คำสั่งนี้จะแสดงรายการทุกแท็กและรหัสอ็อบเจ็กต์คอมมิตที่เกี่ยวข้องตามลำดับเวลา


สับสนเล็กน้อย ... ในแท็กที่มีคำอธิบายประกอบ "committerdate" ว่างเปล่าในขณะที่แท็ก "taggerdate" ที่มีน้ำหนักเบาว่างเปล่า ดังนั้นในฐานะที่เป็นวิธีแก้ปัญหาชั่วคราว '* committerdate' คือการบอกให้ Git ย้อนกลับวันที่จากวัตถุการกระทำเดิมเมื่อมีน้ำหนักเบา ...
นี่

การใช้ 'creatordate' แทนควรทำสิ่งเดียวกันได้อย่างมีประสิทธิภาพ
นี่


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.