วิธีรับชื่อแท็กล่าสุดในสาขาปัจจุบันใน Git


462

วิธีที่ง่ายที่สุดในการรับแท็กล่าสุดใน Git คืออะไร

git tag a HEAD
git tag b HEAD^^
git tag c HEAD^
git tag

เอาท์พุท:

a
b
c

ฉันควรเขียนสคริปต์เพื่อให้ได้รับวันที่และเวลาของแท็กและเปรียบเทียบได้อย่างไร


1
แท็กที่สร้างขึ้นล่าสุดหรือแท็กล่าสุดเรียงตามวันที่ตกลง? คำตอบที่ยอมรับของคุณจะแสดงแท็กที่สร้างขึ้นล่าสุด ซึ่งอาจจะมีปัญหาหากหนึ่งตัดสินใจที่จะปรับเปลี่ยนแท็ก existig ...
Paebbels

คำตอบ:


412

คุณสามารถดูgit describeซึ่งทำอะไรบางอย่างใกล้เคียงกับสิ่งที่คุณถาม


194
ด้วย--abbrev=0มันควรจะกลับแท็กคำอธิบายประกอบที่ใกล้เคียงที่สุด
Jakub Narębski

13
ส่งคืนแท็กล่าสุดในสาขาปัจจุบัน
brittohalloran

42
ที่จะได้รับข้อเขียนแท็กล่าสุดซึ่งเป้าหมายเท่านั้นปัจจุบันได้กระทำการในสาขาปัจจุบันgit describe --exact-match --abbrev=0ใช้
Naftuli Kay

5
คำตอบนี้มีความคิดเห็นไม่ได้ให้แท็กที่ถูกต้องสำหรับฉัน @ kilianic ให้โซลูชันที่ถูกต้อง
Herman J. Radtke III

19
git describe --tagsและเปรียบเทียบแท็ก com ล่าสุดในหน้าปล่อย Github
Adriano Resende

627

วิธีรับแท็กล่าสุด:

git describe --tags

วิธีรับแท็กที่มีคำอธิบายประกอบล่าสุด:

git describe --abbrev=0

2
อ๋อเป็นหน้าคนสำหรับgit describeพูดว่า: --abbrev=<n> [...] An <n> of 0 will suppress long format, only showing the closest tag.
Giorgos Kylafas

22
หรือเพียงแค่git describe --tags
james_womack

5
คำตอบนี้ (และอาจเป็นอย่างอื่น) อาจมีปัญหาหากคุณมีสองแท็กที่ชี้ไปที่การคอมมิทเดียวกัน ฉันคิดว่าไม่มีทางที่ git จะแยกแยะว่าแท็กใดที่สร้างขึ้นก่อนหน้านี้
Paul Lynch

10
นี่ควรเป็นคำตอบที่ยอมรับได้ ขอบคุณสำหรับการส่ง
crmpicco

6
หากคุณต้องการชำระเงินโดยตรงแท็กล่าสุด:git checkout $(git describe --abbrev=0 --tags)
JohnRDOrazio

321

จะส่งออกแท็กของการติดแท็กล่าสุดที่กระทำในทุกสาขา

git describe --tags $(git rev-list --tags --max-count=1)

8
หรือTAG=$(git describe --tags $(git rev-list --tags --max-count=1))@ william-pursell
kilianc

20
นี่คือคำตอบที่ดีที่สุด มันได้รับแท็กในทุกสาขาไม่ใช่เฉพาะสาขาปัจจุบันเหมือนคำตอบที่ "ถูกต้อง" ในปัจจุบัน
brittohalloran

61
ยกเว้นคำถามที่ถามเฉพาะสำหรับสาขาปัจจุบัน
michaeltwofish

3
@michaeltwofish ในเวลาที่ฉันไม่รู้มันฉันคิดออกในภายหลังและแก้ไขตามคำตอบของฉัน ขอโทษด้วยกับเรื่องนั้น.
kilianc

3
หมายเหตุ: คำสั่งนี้จะส่งคืนแท็ก "ล่าสุด" แม้แท็กนี้จะอยู่ในสาขาอื่น
Alan Zhiliang Feng

47

หากต้องการรับแท็กล่าสุดคุณสามารถทำได้:

$ git สำหรับแต่ละการอ้างอิง / แท็ก --sort = -taggerdate --format = '% (refname)' --count = 1

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


2
นี้เกือบจะตรงกับสิ่งที่ผมกำลังมองหา (แท็กล่าสุดในทุกสาขา) แต่อย่างน้อยกับรุ่นของฉันคอมไพล์ (1.7.7.6) แท็กที่มีการผลิตในลำดับเดียวกันสำหรับทั้งสองและ--sort=-authordate --sort=authordate
larsks

3
Aha --sort=-taggerdateเพราะสิ่งที่คุณต้องการจริง สำหรับแท็กauthordateและcommitterdateว่างเปล่า (ไม่มีประโยชน์เหมือนกับปุ่มจัดเรียง)
larsks

8
git for-each-ref refs/tags --sort=-taggerdate --format='%(refname:short)' --count=1ดียิ่งขึ้น :)
Christophe Eblé

5
จริง ๆ แล้ว downvoting คำตอบที่ถูกต้องอย่างสมบูรณ์แบบที่เกือบ 5 ปีโดยไม่มีความคิดเห็น นั่นเป็นเพียงแค่ความหยาบคาย
วิลเลียม Pursell

1
และ--points-at=$SHAจะให้แท็กแฮชคอมมิท
Ryan

34

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

TAG=$(git describe $(git rev-list --tags --max-count=1))

ในทางเทคนิคคุณไม่จำเป็นต้องได้รับแท็กล่าสุด แต่การกระทำล่าสุดที่ติดแท็กซึ่งอาจเป็นหรืออาจไม่ใช่สิ่งที่คุณกำลังมองหา


อันนี้ไม่ได้รับแท็กล่าสุดในสาขาปัจจุบัน แต่สำหรับสาขาใด ๆ อันไหนดีมากเพราะมันเป็นสิ่งที่ฉันต้องการ ขอบคุณ Wincent
jasongregori

2
หากคุณต้องการที่จะได้รับรูปแบบการจับคู่แท็กที่คุณสามารถใช้ใน--tags=<pattern> rev-listตัวอย่างเช่นรับแท็กเวอร์ชันล่าสุดgit describe --tags $(git rev-list --tags='v[0-9].[0-9]*' --max-count=1)
Wirone

1
$ (git อธิบาย - รับ $ (git rev-parse HEAD))
Vaidas Zilionis

ขอบคุณมันใช้งานได้ แต่ฉันต้องเพิ่มgit describe --tags $(git rev-list --tags --max-count=1)
Gianluca Casati

25

คุณสามารถดำเนินการ: git describe --tags $(git rev-list --tags --max-count=1)พูดคุยที่นี่: วิธีรับชื่อแท็กล่าสุด?


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

นี่เป็นสิ่งเดียวที่เหมาะกับฉัน ลอง--abbrev=0คำตอบบางคำแล้วพวกเขาก็ตัดบางส่วนของแท็กที่ฉันต้องการ
ลุคเดวิส

22

"ล่าสุด" อาจมีความหมายสองประการในแง่ของคอมไพล์

คุณอาจหมายถึง "แท็กใดที่มีวันที่สร้างล่าสุดทันเวลา" และคำตอบส่วนใหญ่ที่นี่สำหรับคำถามนั้น cในแง่ของคำถามของคุณคุณจะต้องการที่จะกลับมาแท็ก

หรือคุณอาจจะหมายถึง "ซึ่งเป็นแท็กใกล้เคียงที่สุดในประวัติศาสตร์การพัฒนาบางสาขาที่มีชื่อว่า" HEADมักสาขาที่คุณอยู่บน aในคำถามของคุณนี้จะกลับมาแท็ก

สิ่งเหล่านี้อาจแตกต่างกันแน่นอน:

A->B->C->D->E->F (HEAD)
       \     \
        \     X->Y->Z (v0.2)
         P->Q (v0.1)

ลองนึกภาพแท็กของนักพัฒนาซอฟต์แวร์ที่Zเป็นv0.2ในวันจันทร์จากนั้นติดแท็กที่Qเป็นv0.1วันอังคาร v0.1เป็นสิ่งที่เพิ่งเกิดขึ้น แต่v0.2ใกล้เข้ามาในประวัติศาสตร์การพัฒนาของ HEAD ในแง่ที่ว่าเส้นทางนั้นเริ่มต้นที่จุดที่ใกล้กับ HEAD มากขึ้น

ฉันคิดว่าคุณมักต้องการคำตอบที่สองนี้อย่างใกล้ชิดในประวัติศาสตร์การพัฒนา คุณสามารถค้นหาโดยใช้git log v0.2..HEADetc สำหรับแต่ละแท็ก สิ่งนี้ทำให้คุณมีจำนวนการผูกมัดบน HEAD ตั้งแต่เส้นทางที่สิ้นสุดที่v0.2แยกจากเส้นทางตามด้วย HEAD

ต่อไปนี้เป็นสคริปต์ Python ที่ทำโดยการวนซ้ำแท็กทั้งหมดที่เรียกใช้การตรวจสอบนี้จากนั้นพิมพ์แท็กที่มีค่าคอมมิชชันที่น้อยที่สุดบน HEAD ตั้งแต่เส้นทางแท็กถูกแยกออก:

https://github.com/MacPython/terryfy/blob/master/git-closest-tag

git describeทำบางสิ่งที่แตกต่างเล็กน้อยซึ่งจะติดตามกลับจาก (เช่น) HEAD เพื่อค้นหาแท็กแรกที่อยู่บนเส้นทางย้อนกลับในประวัติศาสตร์จาก HEAD ในแง่คอมไพล์git describeค้นหาแท็กที่ "เข้าถึงได้" จาก HEAD ดังนั้นจะไม่พบแท็กแบบv0.2ที่ไม่ได้อยู่บนเส้นทางที่กลับมาจาก HEAD แต่เป็นเส้นทางที่แยกจากที่นั่น



15
git log --tags --no-walk --pretty="format:%d" | sed 2q | sed 's/[()]//g' | sed s/,[^,]*$// | sed  's ......  '

หากคุณต้องการแท็กสุดท้ายมากกว่าหนึ่ง

(git อธิบาย - บางครั้งแท็กให้แฮ็กผิดฉันไม่รู้ว่าทำไม แต่สำหรับฉัน - max-count 2 ไม่ทำงาน)

นี่คือวิธีที่คุณจะได้รับรายชื่อด้วย 2 ชื่อแท็กล่าสุดตามลำดับเวลาย้อนหลังทำงานได้อย่างสมบูรณ์บน git 1.8.4 สำหรับ git รุ่นก่อนหน้า (เช่น 1.7. *) ไม่มี "tag:" สายอักขระในเอาต์พุต - เพียงแค่ลบสายเรียกล่าสุด

หากคุณต้องการมากกว่า 2 แท็กล่าสุด - เปลี่ยน "sed 2q" เป็น "sed 5q" หรืออะไรก็ได้ที่คุณต้องการ

จากนั้นคุณสามารถแยกวิเคราะห์ชื่อแท็กทุกชื่อได้อย่างง่ายดาย


สิ่งนี้มีประโยชน์จริง ๆ นักพัฒนาจำนวนมากจะพยายามทำให้กระบวนการเผยแพร่เป็นไปโดยอัตโนมัติโดยย้อนกลับไปที่แท็กก่อนหน้าหากการหยุดใช้ สิ่งที่ยอดเยี่ยม !!!
AkD

1
หากต้องการเพิ่มเติมสิ่งต่อไปนี้: git log --tags --no-walk --pretty="format:%D" | sed -nr '5q;s;^.*(tag: )([^,]*).*;\2;p' โดย%Dไม่รวม()ตัวอักษรที่อยู่รอบ ๆ และตัวอักษรsedเริ่มต้น 5q จะทิ้ง 4 บรรทัดก่อนหน้า 5 จากนั้นพิมพ์อักขระทั้งหมดระหว่าง 'แท็ก: `และตัวแรก', ' ดังนั้น ... สมมติว่าไม่มีการใช้เครื่องหมายจุลภาคในแท็ก
Cometsong

14

เกิดอะไรขึ้น กับคำแนะนำทั้งหมด (ยกเว้นคำอธิบายของMatthew Brett , จนถึงปัจจุบันของคำตอบนี้)?

เพียงแค่เรียกใช้คำสั่งใด ๆ ที่จัดทำโดยประวัติ jQuery Git เมื่อคุณอยู่ที่จุดที่แตกต่างกันของประวัติศาสตร์และตรวจสอบผลด้วยการแสดงประวัติการติดแท็กภาพ (ฉันทำนั่นคือเหตุผลที่คุณเห็นโพสต์นี้):

$ git log --graph --all --decorate --oneline --simplify-by-decoration

วันนี้หลายโครงการดำเนินการเผยแพร่ (และการติดแท็ก) ในสาขาที่แยกต่างหากจากการฉีดยา

มีเหตุผลที่แข็งแกร่งสำหรับเรื่องนี้ เพียงแค่มองไปที่โครงการ JS / CSS ที่เป็นที่ยอมรับ สำหรับข้อตกลงผู้ใช้พวกเขามีไฟล์รีลีสไบนารี / minified ใน DVCS ธรรมชาติเป็นผู้ดูแลโครงการที่คุณไม่ต้องการที่จะพ้นจากขยะของคุณdiffประวัติศาสตร์ที่มี blobs ไบนารีที่ไร้ประโยชน์และดำเนินการกระทำของการสร้างสิ่งประดิษฐ์จากฉีด

เนื่องจาก Git ใช้ DAG และไม่ใช่เชิงเส้นประวัติ - มันยากที่จะกำหนดตัวชี้วัดระยะทาง ดังนั้นเราจึงสามารถพูดได้ - โอ้ rev นั้นใกล้กับฉันมากที่สุดHEAD!

ฉันเริ่มการเดินทางของตัวเองใน (ดูข้างในฉันไม่ได้คัดลอกภาพที่สวยงามไปยังโพสต์ยาวนี้):

แท็กที่ใกล้ที่สุดในอดีตที่เกี่ยวกับการแตกแขนงใน Git คืออะไร

ขณะนี้ฉันมีคำจำกัดความที่สมเหตุสมผลเกี่ยวกับระยะห่างระหว่างแท็กและการแก้ไขด้วยการลดประโยชน์:

  • ความยาวของเส้นทางที่สั้นที่สุดจากHEADถึงรวมฐานด้วยแท็ก
  • วันของฐานการผสานระหว่างHEADและแท็ก
  • จำนวน revsที่สามารถเข้าถึงได้จาก HEAD แต่ไม่สามารถเข้าถึงได้จากแท็ก
  • วันที่ของแท็กโดยไม่คำนึงถึงฐานผสาน

ผมไม่ทราบวิธีการคำนวณความยาวของเส้นทางที่สั้นที่สุด

สคริปต์ที่แท็กเรียงลำดับตาม วันที่ของฐานการผสานระหว่างHEADและแท็ก:

$ git tag \
     | while read t; do \
         b=`git merge-base HEAD $t`; \
         echo `git log -n 1 $b --format=%ai` $t; \
       done | sort

สามารถใช้งานได้กับโครงการส่วนใหญ่

สคริปต์ที่เรียงลำดับแท็กตามจำนวนรอบที่สามารถเข้าถึงได้จาก HEAD แต่ไม่สามารถเข้าถึงได้จากแท็ก:

$ git tag \
    | while read t; do echo `git rev-list --count $t..HEAD` $t; done \
    | sort -n

หากประวัติโครงการของคุณมีวันที่ที่ผิดปกติ (เนื่องจากการ rebases หรือการเขียนประวัติอื่นหรือปัญญาอ่อนบางคนลืมที่จะเปลี่ยนแบตเตอรี่ BIOS หรือเวทมนตร์อื่น ๆ ที่คุณทำในประวัติศาสตร์) ใช้สคริปต์ข้างต้น

สำหรับตัวเลือกสุดท้าย ( วันที่ของแท็กโดยไม่คำนึงถึงฐานผสาน ) เพื่อรับรายการของแท็กเรียงตามวันที่ใช้:

$ git log --tags --simplify-by-decoration --pretty="format:%ci %d" | sort -r

หากต้องการทราบวันที่แก้ไขปัจจุบันให้ใช้:

$ git log --max-count=1

ทราบว่าgit describe --tagsมีการใช้งานในกรณีที่เป็นของตัวเอง แต่ไม่ได้สำหรับการหามนุษย์คาดว่าแท็กที่ใกล้ที่สุดในประวัติศาสตร์ของโครงการ

หมายเหตุคุณสามารถใช้สูตรด้านบนในการแก้ไขใด ๆ เพียงแทนที่HEADด้วยสิ่งที่คุณต้องการ!


12

git describe --abbrev=0 --tags

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

git remote update


12
git tag -l ac* | tail -n1

รับแท็กที่ผ่านมาด้วยคำนำหน้า"AC" ยกตัวอย่างเช่นแท็กชื่อด้วยหรือac1.0.0 ac1.0.5แท็กอื่น ๆ ชื่อ1.0.0, 1.1.0จะถูกละเว้น

git tag -l [0-9].* | tail -n1

0-9รับแท็กที่ผ่านมาที่มีถ่านแรกคือ ดังนั้นแท็กที่มีอักขระตัวแรกa-zจะถูกละเว้น

ข้อมูลเพิ่มเติม

git tag --help # Help for `git tag`

git tag -l <pattern>

รายการแท็กที่มีชื่อที่ตรงกับรูปแบบที่กำหนด (หรือทั้งหมดหากไม่มีรูปแบบกำหนดไว้) การเรียกใช้ "แท็ก git" โดยไม่มีอาร์กิวเมนต์จะแสดงรายการแท็กทั้งหมดด้วย รูปแบบเป็นสัญลักษณ์แทนเชลล์ (เช่นจับคู่โดยใช้ fnmatch (3)) อาจมีหลายรูปแบบ หากมีรายการใดตรงกับแท็กนั้นจะปรากฏขึ้น


tail -n <number> # display the last part of a file
tail -n1 # Display the last item 

ปรับปรุง

ด้วยgit tag --helpเกี่ยวกับการsortโต้แย้ง มันจะใช้lexicorgraphic orderตามค่าเริ่มต้นหากtag.sortไม่มีคุณสมบัติ

เรียงลำดับค่าเริ่มต้นเป็นค่าที่ตั้งค่าไว้สำหรับตัวแปร tag.sort หากมีอยู่หรือมีคำสั่งทำพจนานุกรมอื่น ดู git-config (1)

หลังจาก google มีคนพูดว่า git 2.8.0 รองรับการติดตามไวยากรณ์

git tag --sort=committerdate

มันไม่กระทะสำหรับฉันแท็กสุดท้ายคือ 2.11.174 แต่พิมพ์นี้ 2.11.99 เพราะเรียงลำดับไม่เป็นเวอร์ชัน
Ali.MD

8
git tag --sort=committerdate | tail -1

โปรดอธิบายว่าข้อมูลโค้ดนี้จะแก้ปัญหาอย่างไรแทนที่จะโพสต์คำตอบเฉพาะรหัสเท่านั้น
Arun Vinoth

5

ต่อไปนี้ใช้ได้กับฉันในกรณีที่คุณต้องการสองแท็กสุดท้าย (ตัวอย่างเช่นเพื่อสร้างบันทึกการเปลี่ยนแปลงระหว่างแท็กปัจจุบันและแท็กก่อนหน้า) ฉันได้ทดสอบในกรณีที่แท็กล่าสุดเป็นHEADเท่านั้น

PreviousAndCurrentGitTag=`git describe --tags \`git rev-list --tags --abbrev=0 --max-count=2\` --abbrev=0`
PreviousGitTag=`echo $PreviousAndCurrentGitTag | cut -f 2 -d ' '`
CurrentGitTag=`echo $PreviousAndCurrentGitTag | cut -f 1 -d ' '`

GitLog=`git log ${PreviousGitTag}..${CurrentGitTag} --pretty=oneline | sed "s_.\{41\}\(.*\)_; \1_"`

มันเหมาะกับความต้องการของฉัน แต่เนื่องจากฉันไม่มีตัวช่วยสร้างคอมไพล์ฉันแน่ใจว่ามันจะดีขึ้นอีก ฉันยังสงสัยว่ามันจะพังในกรณีที่ประวัติการกระทำก้าวไปข้างหน้า ฉันแค่แบ่งปันในกรณีที่ช่วยใครบางคน


4

ความคิดแรกของฉันคือคุณสามารถใช้git rev-list HEADซึ่งจะแสดงรายการ revs git tag --containsทั้งหมดที่อยู่ในลำดับย้อนกลับในการรวมกันกับ เมื่อคุณพบการอ้างอิงที่git tag --containsสร้างรายการที่ไม่ว่างคุณจะพบแท็กล่าสุด


4

หากคุณต้องการค้นหาแท็กสุดท้ายที่นำไปใช้กับสาขาเฉพาะคุณสามารถลองต่อไปนี้:

git describe --tag $(git rev-parse --verify refs/remotes/origin/"branch_name")

3

หากคุณต้องการสายการบินหนึ่งที่ได้รับชื่อแท็กล่าสุด (ตามวันที่แท็ก) ในสาขาปัจจุบัน :

git for-each-ref refs/tags --sort=-taggerdate --format=%(refname:short) --count=1 --points-at=HEAD

เราใช้สิ่งนี้เพื่อตั้งค่าหมายเลขรุ่นในการตั้งค่า

ตัวอย่างผลลัพธ์:

v1.0.0

ทำงานบน Windows ได้เช่นกัน


1
บน Linux (ยืด Debian) ฉันได้รับ-bash: syntax error near unexpected token '('
Jeremy Davis

1
ถ้าฉันห่อส่วนนั้นด้วยเครื่องหมายคำพูด (เช่น--format="%(refname:short)") และข้ามส่วน--points-at=HEADนั้นไปใช้งานได้ ด้วยสวิตช์ครั้งสุดท้ายมันไม่ได้อะไรเลยฉันเดาว่าเพราะฉันHEADไม่มีแท็ก
Jeremy Davis

@ JeremyDavis ใช่ฉันคิดว่านั่นเป็นเพราะคุณHEADไม่ได้แท็ก
Markus

2

นี่เป็นเธรดเก่า แต่ดูเหมือนว่าผู้คนจำนวนมากขาดคำตอบที่ง่ายที่สุดง่ายที่สุดและถูกต้องที่สุดสำหรับคำถามของ OP: เพื่อให้ได้แท็กล่าสุดสำหรับสาขาปัจจุบันคุณใช้git describe HEADคุณใช้เสร็จสิ้น

แก้ไข: คุณยังสามารถระบุชื่อที่ถูกต้องใด ๆ แม้แต่รีโมต เช่นgit describe origin/masterจะบอกแท็กล่าสุดที่สามารถเข้าถึงได้จากจุดเริ่มต้น / ต้นแบบ


ไม่มีอะไรรับประกันว่า "แท็กล่าสุด" ได้รับการจัดการโดยสาขาใด ๆ โซลูชันการทำงานสองแบบคือfor-each-refคำสั่ง ( stackoverflow.com/a/5261470/515973 ) และการรวมกันของrev-listและdescribe( stackoverflow.com/a/7979255/515973 )
Julien Carsique

1
สิ่งนี้ไม่ได้รับแท็กล่าสุดสำหรับฉัน
K - ความเป็นพิษใน SO กำลังเพิ่มขึ้น

git describe branchname --tagsทำงานให้ฉันเพื่อรับแท็กล่าสุดในสาขา (รุ่น git 2.12.2)
Rob_M

0

เพื่อให้ได้แท็กล่าสุดเฉพาะในสาขา / ชื่อแท็กปัจจุบันที่นำหน้าด้วยสาขาปัจจุบันฉันต้องดำเนินการดังต่อไปนี้

BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags --abbrev=0 $BRANCH^ | grep $BRANCH

หัวหน้าสาขา:

git checkout master

BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags 
--abbrev=0 $BRANCH^ | grep $BRANCH

master-1448

กำหนดเองสาขา:

git checkout 9.4

BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags 
--abbrev=0 $BRANCH^ | grep $BRANCH

9.4-6

และสุดท้ายของฉันต้องเพิ่มและรับแท็ก +1 สำหรับการติดแท็กถัดไป

BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags  --abbrev=0 $BRANCH^ | grep $BRANCH | awk -F- '{print $NF}'

0

สำหรับคำถามที่ถาม

วิธีรับชื่อแท็กล่าสุดในสาขาปัจจุบัน

คุณต้องการ

git log --first-parent --pretty=%d | grep -m1 tag:

--first-parentบอกว่าจะgit logไม่ให้รายละเอียดใด ๆ รวมประวัติศาสตร์--pretty=%dบอกว่าจะแสดงเฉพาะการตกแต่งเช่นชื่อท้องถิ่นสำหรับการกระทำใด ๆ grep -m1พูดว่า "จับคู่แค่แท็กเดียว" ดังนั้นคุณจะได้รับแท็กล่าสุด


0

หากแท็กของคุณสามารถจัดเรียงได้:

git tag --merged $YOUR_BRANCH_NAME | grep "prefix/" | sort | tail -n 1

0

ไม่ค่อยมีการพูดถึงแท็กที่ไม่ได้จดทะเบียนกับแท็กที่มีคำอธิบายประกอบที่นี่ 'อธิบาย' ทำงานบนแท็กที่มีคำอธิบายประกอบและละเว้นแท็กที่ไม่ได้ใส่คำอธิบาย

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

การกรองควรได้รับการปรับให้เหมาะสม (รวมแล้ว) แต่ดูเหมือนว่าจะเป็นงานอีกครั้ง

git log  --decorate --tags master |grep '^commit'|grep 'tag:.*)$'|awk '{print $NF}'|sed 's/)$//'|head -n 1

คำติชมยินดีต้อนรับขณะที่ฉันกำลังจะนำสิ่งนี้ไปใช้ :)


-2

อีกวิธีง่ายๆในการรับชื่อแท็กล่าสุดคือ

git tag | tail -1

หรือ

TAG=$(git tag | tail -1)

เพื่อเก็บไว้ในตัวแปร

git tagแสดงรายการแท็กที่มีทั้งหมดและจะส่งคืนแถวสุดท้ายหากผลลัพธ์tail-1


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