สำหรับรุ่นต่างๆฉันมักจะแท็กด้วย v1.1.0 ระหว่างสร้างสคริปต์ของฉันฉันกำลังสร้างไฟล์ fwVersion.c ที่มีข้อมูลคอมไพล์ปัจจุบัน ขณะนี้ฉันมีข้อผูกมัดและข้อมูลสาขาในไฟล์ แต่ฉันต้องการเพิ่มแท็ก
เป็นไปได้หรือไม่
สำหรับรุ่นต่างๆฉันมักจะแท็กด้วย v1.1.0 ระหว่างสร้างสคริปต์ของฉันฉันกำลังสร้างไฟล์ fwVersion.c ที่มีข้อมูลคอมไพล์ปัจจุบัน ขณะนี้ฉันมีข้อผูกมัดและข้อมูลสาขาในไฟล์ แต่ฉันต้องการเพิ่มแท็ก
เป็นไปได้หรือไม่
คำตอบ:
git describeตรวจสอบเอกสารสำหรับ พบแท็กที่ใกล้ที่สุดกับคอมมิตที่กำหนด (นั่นคือแท็กที่ชี้ไปยังบรรพบุรุษของคอมมิต) และอธิบายการคอมมิตนั้นในแง่ของแท็ก
หากคุณต้องการทราบว่าการกระทำนั้นถูกชี้ไปที่แท็กหรือไม่คุณสามารถตรวจสอบผลลัพธ์ของ:
git describe --exact-match <commit-id>
git describe --all --exact-match `git rev-parse HEAD`
git describe --tags --abbrev=0 REVจะมีประโยชน์เมื่อคุณไม่ต้องการให้ขยะอยู่บนแท็ก
git describe --all(สำหรับคอมมิตที่เช็คเอาต์ในปัจจุบัน) หรือgit describe --all <commit>ทำทุกอย่างที่ฉันต้องการมาโดยตลอด
หากสิ่งที่คุณต้องการคือแท็กแรกที่มีคอมมิตแล้ว:
git describe --contains <commit>
ให้คำตอบที่ดีที่สุด IMO หากคุณมีแท็กบ่อยกว่าการใช้ "git tag --contains" บนคอมมิตเก่าในที่เก็บขนาดใหญ่อาจใช้เวลาสักครู่ในการรันและให้แท็กทั้งหมดที่มีคอมมิตนั้น
รูปแบบของคำอธิบายคอมไพล์นี้ทำงานได้เร็วมากและให้ค่าเอาต์พุตเดียวซึ่งเป็นแท็กแรกที่มีคอมมิตและคอมมิตของคุณกลับมาไกลแค่ไหน
แล้วเรื่องนี้ล่ะ?
git tag --points-at <commit-id>
ให้แท็กทั้งหมดที่คอมมิตที่กำหนดมีgit describeให้กับคุณ(ในขณะที่ให้คุณเพียงแท็กเดียวเท่านั้น) และไม่รวมแท็กในคอมมิตที่สืบทอด (เช่นgit tag --containsทำ)
คุณสามารถค้นหาข้อมูลนี้ได้ในคู่มือ
git tag --contains <commit>
ฉันพบคำสั่งผสมของคำตอบยอดนิยมทั้งสองเพื่อให้สิ่งที่ฉันต้องการ:
git describe --tags --exact-match <commit-id>
สิ่งนี้ให้แท็กที่มีไว้สำหรับคอมมิตนั้นเท่านั้นและสำหรับแท็กที่ไม่มีคำอธิบายประกอบ มีประโยชน์เมื่อคุณต้องการค้นหาแท็กและไม่ต้องกังวลกับการลอกการจัดรูปแบบออก (สำหรับ Jenkins เป็นต้น)
เช่น. $ git describe --tags --exact-match head~2
ให้คุณ:
$ ReleaseBeta
การรวมคำตอบบางส่วน:
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
git describe --tags <commit-id>สำหรับแท็กที่ไม่มีคำอธิบาย