กดคอมไพล์และแท็กพร้อมกัน


387

ฉันรู้เหตุผลว่าเป็นงานที่แยกต่างหากเพื่อเก่าธรรมดาgit push --tags git pushการกดแท็กควรเป็นทางเลือกที่ใส่ใจเนื่องจากคุณไม่ต้องการดันแท็กโดยไม่ตั้งใจ ไม่เป็นไร. แต่มีวิธีที่จะผลักดันทั้งสองเข้าด้วยกันหรือไม่ (นอกเหนือจากgit push && git push --tags)


4
คุณมีปัญหาgit push && git push --tagsอะไร
fuz

21
ไม่มีอะไรพิเศษมันช้ากว่าเนื่องจากการเชื่อมต่อจะต้องสร้างขึ้นสองครั้ง
Will Robertson

16
ดูคำตอบที่อัปเดตของฉันด้านล่าง: มี--follow-tagsตัวเลือกใหม่ตั้งแต่ git 1.8.3
VonC

24
อีกเหตุผลที่จะไม่ทำสิ่งเหล่านี้แยกกันคือหลีกเลี่ยงการกระตุ้นให้เกิดการสร้าง CI สองครั้งสำหรับการกระทำแบบเดียวกันเมื่อคุณมีระบบอัตโนมัติแบบนั้น
Alex R

ยัง--tagsไม่แยกความแตกต่างระหว่างแหล่งที่มาของ
karlsebal

คำตอบ:


555

อัปเดตพฤษภาคม 2558

ในฐานะของคอมไพล์ 2.4.1คุณสามารถทำได้

git config --global push.followTags true

หากตั้งค่าเป็นเปิดใช้งานจริง - ตัวเลือกติดตามแท็กโดยค่าเริ่มต้น
คุณสามารถแทนที่การกำหนดค่านี้ในเวลาที่กดโดยระบุ --no-follow-tags

ตามที่ระบุไว้ในหัวข้อนี้โดย Matt Rogers ตอบ Wes Hurd :

--follow-tags ดันแท็กหมายเหตุประกอบเท่านั้น

git tag -a -m "I'm an annotation" <tagname>

ที่จะถูกผลัก (ตรงข้ามกับgit tag <tagname>แท็กที่มีน้ำหนักเบาซึ่งจะไม่ถูกผลักตามที่ฉันกล่าวถึงที่นี่ )

อัปเดตเมษายน 2013

ตั้งแต่Git 1.8.3 (เมษายน 22D, 2013) , คุณไม่ต้องทำ 2 คำสั่งที่จะผลักดันสาขาและจากนั้นจะผลักดันแท็ก :

ใหม่ " --follow-tagsตัวเลือก" บอก " git push" เพื่อผลักดันแท็กข้อเขียนที่เกี่ยวข้องเมื่อผลักดันสาขาออก

คุณสามารถลองได้แล้วเมื่อกดคอมมิทใหม่:

git push --follow-tags

ว่าจะไม่ผลักดันทุกแท็กท้องถิ่น git pushแต่เพียงหนึ่งอ้างอิงโดยกระทำซึ่งจะผลักดันให้กับ

Git 2.4.1+ (Q2 2558) จะแนะนำตัวเลือกpush.followTags: ดู " วิธีสร้าง" git push"รวมแท็กภายในสาขาหรือไม่ "

คำตอบเดิมกันยายน 2010

ตัวเลือกนิวเคลียร์จะเป็นgit push --mirrorซึ่งจะผลักดัน refs refs/ทั้งหมดภายใต้

นอกจากนี้คุณยังสามารถผลักดันแท็กเพียงแท็กเดียวด้วยการกำหนดสาขาปัจจุบันของคุณ:

git push origin : v1.0.0 

คุณสามารถรวม--tagsตัวเลือกกับ refspec เช่น:

git push origin --tags :

(เนื่องจาก--tagsหมายถึง: การอ้างอิงทั้งหมดrefs/tagsถูกผลักนอกจากการอ้างอิงอย่างชัดเจนในบรรทัดคำสั่ง )


คุณมีรายการนี้ " ผลักสาขาและแท็กด้วยการเรียก" git push "เดียว "

เคล็ดลับที่มีประโยชน์ถูกโพสต์ไปยังรายชื่อผู้รับจดหมาย GitโดยZoltánFüzesi:

ฉันใช้.git/configเพื่อแก้ปัญหานี้:

[remote "origin"]
    url = ...
    fetch = +refs/heads/*:refs/remotes/origin/*
    push = +refs/heads/*
    push = +refs/tags/*

ด้วยการเพิ่มบรรทัดเหล่านี้git push originจะอัปโหลดสาขาและแท็กทั้งหมดของคุณ หากคุณต้องการอัปโหลดบางส่วนเท่านั้นคุณสามารถระบุได้

ยังไม่ได้ลองด้วยตัวเอง แต่ดูเหมือนว่ามันจะมีประโยชน์จนกว่าจะมีวิธีอื่นในการผลักกิ่งและแท็กในเวลาเดียวกันถูกเพิ่มเข้าไปใน git push
ในทางตรงกันข้ามฉันไม่รังเกียจการพิมพ์:

$ git push && git push --tags

ระวังตามที่แสดงความคิดเห็นโดยAseem Kishore

push = +refs/heads/*จะบังคับให้ผลักดันให้สาขาทั้งหมดของคุณ

บิตนี้ฉันตอนนี้ดังนั้น FYI


René Scheibeเพิ่มความคิดเห็นที่น่าสนใจนี้ :

--follow-tagsพารามิเตอร์จะทำให้เข้าใจผิดเป็นแท็กภายใต้การ.git/refs/tagsได้รับการพิจารณา
หากgit gcมีการเรียกใช้แท็กจะถูกย้ายจากไป.git/refs/tags .git/packed-refsหลังจากนั้นgit push --follow-tags ...ไม่ทำงานตามที่คาดไว้อีกต่อไป


3
หนึ่งความคิดเห็นในโพสต์ที่เชื่อมโยงไปอย่างถูกต้องชี้ให้เห็นว่าpush = +refs/heads/*เส้นแรง -pushes ทุกสาขาของคุณ บิตนี้ฉันตอนนี้ดังนั้น FYI
Aseem Kishore

2
Re: การ--follow-tagsตั้งค่าสถานะเพิ่มใน git 1.8.3 ฉันสามารถกำหนดค่าการติดตั้ง git ของฉันเพื่อให้เป็นค่าเริ่มต้นได้หรือไม่
เทรเวอร์เบิร์นแฮม

1
@TrevorBurnham ไม่เพียงค่าของpush.default( git-scm.com/docs/git-config ) สามารถกำหนดค่าเริ่มต้นในการดำเนินการผลักดัน ( nothing, matching, upstream, simpleเช่นเดียวกับในstackoverflow.com/a/10002469/6309 ) คุณต้องเพิ่ม--follow-tagอย่างชัดเจน
VonC

1
@VonC จะเกิดอะไรขึ้นถ้าฉันต้องการบังคับให้กดแท็ก git push --follow-tags -fไม่ได้ผลสำหรับฉัน
mauryat

1
--follow-tagsพารามิเตอร์จะทำให้เข้าใจผิดเป็นแท็กภายใต้การ.git/refs/tagsได้รับการพิจารณา หากgit gcมีการเรียกใช้แท็กจะถูกย้ายจากไป.git/refs/tags .git/packed-refsหลังจากนั้นgit push --follow-tags ...ไม่ทำงานตามที่คาดไว้อีกต่อไป
René Scheibe

4

บางทีนี่อาจช่วยใครซักคน:

 1. git commit -a -m "msg"  
 2. git tag 0.1.0                // creates a new tag locally     
 3. git push origin tag 0.1.0    // pushes the tag & the code in the remote repo          

ฉันลองวิธีแก้ปัญหาของคุณด้วย git-2.21.0.windows.1 และพบว่ามีเพียง 3 แท็กที่กดแท็กเท่านั้น
Dustin Sun

มันทำงานได้ดีในตอนท้ายของฉัน คุณกำลังลองทั้ง 3 คำสั่งตามลำดับถูกต้องและตั้ง repo ระยะไกล (git remote -v)?
Rajesh Gupta

ฉันใช้ "git commit -m" msg "ในขั้นตอนที่ 1 และไม่มีพารามิเตอร์ -a นี่อาจเป็นสาเหตุขอบคุณสำหรับการติดตาม!
Dustin Sun


0

Git GUI

Git GUI มีปุ่ม PUSH - อภัยโทษปุนและกล่องโต้ตอบที่เปิดขึ้นจะมีช่องทำเครื่องหมายสำหรับแท็ก

ฉันผลักสาขาจากบรรทัดคำสั่งโดยไม่มีแท็กจากนั้นลองผลักสาขาอีกครั้งโดยใช้--follow-tagsตัวเลือกที่อยู่ด้านบน ตัวเลือกมีการอธิบายไว้เป็นแท็กหมายเหตุประกอบดังต่อไปนี้ แท็กของฉันเป็นแท็กที่เรียบง่าย

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

Git กลับบอกว่าทุกอย่างทันสมัย มันไม่ได้ส่งแท็ก! อาจเป็นเพราะแท็กไม่มีการเพิ่มความคิดเห็น อาจเป็นเพราะไม่มีอะไรใหม่ในสาขา

เมื่อฉันกด Git GUI ที่คล้ายกันแท็กจะถูกส่ง

แท็กที่ส่งด้วย Git GUI

เวลาเป็นของฉันกำลังจะได้รับการผลักดันการเปลี่ยนแปลงของฉันไปที่รีโมทของฉันกับ Git GUI --follow-tagsและไม่ได้อยู่กับบรรทัดคำสั่งและ

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