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


92

สำหรับรุ่นต่างๆฉันมักจะแท็กด้วย v1.1.0 ระหว่างสร้างสคริปต์ของฉันฉันกำลังสร้างไฟล์ fwVersion.c ที่มีข้อมูลคอมไพล์ปัจจุบัน ขณะนี้ฉันมีข้อผูกมัดและข้อมูลสาขาในไฟล์ แต่ฉันต้องการเพิ่มแท็ก

เป็นไปได้หรือไม่

คำตอบ:


118

git describeตรวจสอบเอกสารสำหรับ พบแท็กที่ใกล้ที่สุดกับคอมมิตที่กำหนด (นั่นคือแท็กที่ชี้ไปยังบรรพบุรุษของคอมมิต) และอธิบายการคอมมิตนั้นในแง่ของแท็ก

หากคุณต้องการทราบว่าการกระทำนั้นถูกชี้ไปที่แท็กหรือไม่คุณสามารถตรวจสอบผลลัพธ์ของ:

git describe --exact-match <commit-id>

32
git describe --tags <commit-id>สำหรับแท็กที่ไม่มีคำอธิบาย
Aleksandr Levchuk

1
ฉันรักสิ่งนี้. โดยเฉพาะอย่างยิ่งฉันชอบที่จะทำให้มนุษย์สามารถอ่านได้จากการแก้ไขปัจจุบัน:git describe --all --exact-match `git rev-parse HEAD`
dsummersl

6
ในเวอร์ชันที่ใหม่กว่าgit describe --tags --abbrev=0 REVจะมีประโยชน์เมื่อคุณไม่ต้องการให้ขยะอยู่บนแท็ก
Craig Ringer

1
git describe --all(สำหรับคอมมิตที่เช็คเอาต์ในปัจจุบัน) หรือgit describe --all <commit>ทำทุกอย่างที่ฉันต้องการมาโดยตลอด
rfay

ส่วนที่ดีที่สุดของการใช้เวอร์ชันจาก git คือไม่มีการฮาร์ดโค้ดเวอร์ชันในซอร์สอีกต่อไปเมื่อมีการปรับใช้ซอฟต์แวร์ git อธิบายวิธีการค้นหาแท็กที่ใกล้ที่สุดสามารถใช้ในการคำนวณหมายเลขเวอร์ชันถัดไปและเพิ่มแท็กอ้างอิงไปยัง repo และชื่อแพ็กเกจ
Sid

65

หากสิ่งที่คุณต้องการคือแท็กแรกที่มีคอมมิตแล้ว:

git describe --contains <commit>

ให้คำตอบที่ดีที่สุด IMO หากคุณมีแท็กบ่อยกว่าการใช้ "git tag --contains" บนคอมมิตเก่าในที่เก็บขนาดใหญ่อาจใช้เวลาสักครู่ในการรันและให้แท็กทั้งหมดที่มีคอมมิตนั้น

รูปแบบของคำอธิบายคอมไพล์นี้ทำงานได้เร็วมากและให้ค่าเอาต์พุตเดียวซึ่งเป็นแท็กแรกที่มีคอมมิตและคอมมิตของคุณกลับมาไกลแค่ไหน


28

แล้วเรื่องนี้ล่ะ?

git tag --points-at <commit-id>

ให้แท็กทั้งหมดที่คอมมิตที่กำหนดมีgit describeให้กับคุณ(ในขณะที่ให้คุณเพียงแท็กเดียวเท่านั้น) และไม่รวมแท็กในคอมมิตที่สืบทอด (เช่นgit tag --containsทำ)


ฉันชอบสิ่งนี้เพราะไม่มีการเขียนข้อความแสดงข้อผิดพลาดถึง stderr ขอบคุณ.
Basuke

24

คุณสามารถค้นหาข้อมูลนี้ได้ในคู่มือ

git tag --contains <commit>

3
สิ่งนี้จะแสดงรายการแท็กทั้งหมดที่มีการกระทำที่กำหนด (เช่นแท็กที่ชี้ไปที่ชายด์ของการกระทำที่กำหนด) ดังนั้นจึงไม่จำเป็นต้องให้แท็กเดียวสำหรับการกระทำที่กำหนดหรือข้อมูลใด ๆ เกี่ยวกับแท็กที่ใกล้เคียงที่สุดเว้นแต่ รายการมีเพียงคอมมิตเดียว
CB Bailey

4
ดังที่ Charles Bailey กล่าวไว้ข้างต้นนั่นไม่ใช่สิ่งที่ฉันกำลังมองหา บางทีคุณควร RTFM :)
wes

1
ขอโทษที่ตอบผิด เมื่อตรวจสอบแล้วดูเหมือนว่าจะทำตามที่คุณขอ ฉันทำ RTFM ฉันแค่แก้ปัญหาที่ไม่ถูกต้อง Hope Bailey เสนอวิธีแก้ปัญหาที่ช่วยคุณได้
dharga

6
คุณไม่จำเป็นต้องอ่านคู่มือคอมไพล์ทั้งหมดก่อนที่คุณจะถามคำถามเกี่ยวกับคอมไพล์ SO ใช่ไหม? google จัดทำดัชนี SO ดีกว่าหน้าคนคอมไพล์ใด ๆ ...
aaronstacy

13

ฉันพบคำสั่งผสมของคำตอบยอดนิยมทั้งสองเพื่อให้สิ่งที่ฉันต้องการ:

git describe --tags --exact-match <commit-id>

สิ่งนี้ให้แท็กที่มีไว้สำหรับคอมมิตนั้นเท่านั้นและสำหรับแท็กที่ไม่มีคำอธิบายประกอบ มีประโยชน์เมื่อคุณต้องการค้นหาแท็กและไม่ต้องกังวลกับการลอกการจัดรูปแบบออก (สำหรับ Jenkins เป็นต้น)

เช่น. $ git describe --tags --exact-match head~2

ให้คุณ:

$ ReleaseBeta

0

การรวมคำตอบบางส่วน:

git tag --contains [<ref>]

และ

git tag --points-at [<ref>]

หรือเพียงแค่

git tag

ทำงานเหมือนกันพิมพ์แท็กใด ๆ (และทั้งหมด) สำหรับการอ้างอิงที่ระบุหรือการคอมมิตปัจจุบันหากไม่ได้ระบุไว้

git describe --tags [<ref>]

โดยที่<ref>ค่าดีฟอลต์เป็นคอมมิตปัจจุบันออกด้วย 128 หากไม่มีแท็กที่เชื่อมโยงกับคอมมิตและพิมพ์แท็กที่เกี่ยวข้องกับคอมมิต (ดูเหมือนจะไม่มีรูปแบบ)

git describe [<ref>] ทำงานเหมือนกับ--tagsยกเว้นว่าจะพิมพ์เฉพาะแท็กที่มีคำอธิบายประกอบเท่านั้น

การระบุอ็อพชัน--containsเพื่อdescribeพิมพ์แท็กที่เชื่อมโยงกับบรรพบุรุษของคอมมิตที่ระบุ ตัวอย่างเช่น

$ git init
Initialized empty Git repository in /tmp/test
$ git commit -m one --allow-empty
[master (root-commit) 7fdfff2] one
$ git commit -m two --allow-empty
[master cd5f8f1] two
$ git tag -am foo foo
$ git tag bar
$ git log --format=oneline
cd5f8f1f4f29eb164f83e224768ccaf37fe170ed (HEAD -> master, tag: foo, tag: bar) two
7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1 one
$ git describe 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
fatal: No tags can describe '7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1'.
Try --always, or create some tags.
$ git describe --contains 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
bar~1

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.