คุณจะผลักดันแท็กไปยังพื้นที่เก็บข้อมูลระยะไกลโดยใช้ Git ได้อย่างไร


2217

ฉันได้โคลนที่เก็บ Git ระยะไกลไปยังแล็ปท็อปของฉันแล้วฉันต้องการเพิ่มแท็กดังนั้นฉันจึงวิ่ง

git tag mytag master

เมื่อฉันใช้งานgit tagแล็ปท็อปแท็กmytagจะปรากฏขึ้น จากนั้นฉันต้องการผลักดันสิ่งนี้ไปยังพื้นที่เก็บข้อมูลระยะไกลดังนั้นฉันมีแท็กนี้กับลูกค้าของฉันทั้งหมดดังนั้นฉันจึงเรียกใช้git pushแต่ฉันได้รับข้อความ:

ทุกอย่างทันสมัย

และถ้าฉันไปที่เดสก์ท็อปของฉันและเรียกใช้git pullแล้วgit tagไม่มีแท็กแสดง

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

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

คำตอบ:


1088

git push --follow-tags

นี่คือตัวเลือกที่มีสติที่นำมาใช้ใน Git 1.8.3:

git push --follow-tags

มันผลักทั้งกระทำและแท็กเท่านั้นที่มีทั้ง:

  • ข้อเขียน
  • สามารถเข้าถึงได้ (บรรพบุรุษ) จากการผลักดัน

นี่คือเหตุผลเพราะ:

เป็นเหตุผลที่--tagsควรหลีกเลี่ยง

Git 2.4 ได้เพิ่มpush.followTagsตัวเลือกที่จะหันธงว่าตามค่าเริ่มต้นที่คุณสามารถตั้งค่าด้วย:

git config --global push.followTags true

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

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

ดังนั้นเมื่อฉันทำสิ่งนี้ฉันกลับไปที่ bitbucket ฉันควรเห็นรายการแท็กที่ไหนสักแห่งนอกเหนือจากความสามารถในการดูจากบรรทัดคำสั่งหรือไม่
PositiveGuy

10
สิ่งนี้ใช้ไม่ได้กับฉันใน git 2.5.0 แต่git push origin --tagsใช้ได้
nnyby

3
ขอบคุณสำหรับเคล็ดลับ push.followTags ฉันไม่อยากจะเชื่อเลยว่านี่ไม่ใช่ค่าเริ่มต้นทันที หากไม่มีก็ไม่ต้องกังวลกับการติดแท็กคุณจะลืมและออกจากการซิงค์แท็ก
moodboom

3606

วิธีกดแท็กเดียว :

git push origin <tag_name>

และคำสั่งต่อไปนี้ควรผลักดันแท็กทั้งหมด ( ไม่แนะนำ ):

git push --tags

426
ฉันไม่แนะนำให้ใช้หรือฝึกฝนผู้อื่นให้ใช้git push --tagsเนื่องจากอาจเป็นการยากมากที่จะกำจัดแท็กที่ไม่ดีเมื่อเพื่อนร่วมงานของคุณได้รับการฝึกฝนให้กดแท็กทั้งหมดเนื่องจากผู้คนยังคงผลักแท็กที่ไม่ดีเก่า ๆ เพื่อผลักดันแท็กใหม่ ด้วยเหตุนี้ฉันจะเพียงแนะนำให้ทุกคนใช้git push origin <tag_name>ตอนนี้
Scott Jungwirth

43
ในการผลักดันแท็กที่ถูกย้าย : git push origin <tag_name> --force
บ็อบสไตน์

38
@ScottJungwirth ดีฉันคิดว่าในฐานะนักพัฒนาคนหนึ่งควรระวัง มิฉะนั้นคุณอาจแนะนำไม่ให้สอนคำสั่งที่ใช้ได้ทั้งหมด
Willa

18
หากแท็กของคุณเหมือนกับสาขาระยะไกลและgit pushล้มเหลวerror: src refspec <tag_name> matches more than one.คุณสามารถกดเป็นgit push origin tag <tag_name>
Volodymyr Sapsai

5
ดี @Willa คำถามคือ "ดันแท็กไปยัง repo ระยะไกล." ดังนั้นเป็นคำตอบที่ดีมากสำหรับคำถามที่ ;)git push origin <tag_name>
สัญลักษณ์แทน


99

หากต้องการขยายคำตอบของ Trevorคุณสามารถกดแท็กเดียวหรือแท็กทั้งหมดของคุณพร้อมกัน

กดแท็กเดียว

git push <remote> <tag>

นี่คือบทสรุปของเอกสารที่เกี่ยวข้องที่อธิบายสิ่งนี้ (ตัวเลือกคำสั่งบางตัวถูกละเว้นสำหรับความกะทัดรัด):

git push [[<repository> [<refspec>…]]

<refspec>...

รูปแบบของ<refspec>พารามิเตอร์คือ ... การอ้างอิงต้นทาง<src>ตามด้วยโคลอน:ตามด้วยการอ้างอิงปลายทาง<dst>...

การ<dst>บอกที่อ้างอิงในด้านระยะไกลมีการปรับปรุงด้วยการกดนี้ ... หาก:<dst>ไม่ได้ใส่การอ้างอิงเดียวกันกับที่<src>จะมีการปรับปรุง ...

แท็กวิธีการเช่นเดียวกับ<tag>refs/tags/<tag>:refs/tags/<tag>

ผลักดันแท็กทั้งหมดของคุณในครั้งเดียว

git push --tags <remote>
# Or
git push <remote> --tags

นี่คือบทสรุปของเอกสารที่เกี่ยวข้อง (ตัวเลือกคำสั่งบางตัวถูกละเว้นสำหรับความกะทัดรัด):

git push [--all | --mirror | --tags] [<repository> [<refspec>…]]

--tags

การอ้างอิงทั้งหมดrefs/tagsจะถูกผลักออกไปนอกเหนือจากการระบุอย่างชัดเจนในบรรทัดคำสั่ง


tagตัวอย่างที่จะออกจากคำหลัก git push origin tag funny-tag-1เช่น
JamesThomasMoon1979

1
@ JamesThomasMoon1979 คุณไม่ต้องการมัน คุณดันแท็กหนึ่งแท็กให้กำเนิดดังนี้: git push origin my-tag(ฉันเพิ่งลอง!)
Andres F.

ฉันใช้เวอร์ชั่น1.9.1แล้วคุณล่ะ @AndresF ?
JamesThomasMoon1979

1
@ JamesThomasMoon1979 2.10.2รุ่น อาจจะใช่มั้ย
Andres F.

54

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

git push origin <tagname>

เราสามารถผลักดันแท็กทั้งหมดในครั้งเดียวโดยใช้คำสั่งด้านล่าง:

git push origin --tags

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

http://www.cubearticle.com/articles/more/git/git-tag

http://wptheming.com/2011/04/add-remove-github-tags


50

คุณสามารถผลักดันแท็กท้องถิ่นทั้งหมดโดยเพียงแค่git push --tagsคำสั่ง

$ git tag                         # see tag lists
$ git push origin <tag-name>      # push a single tag
$ git push --tags                 # push all local tags 


15

ฉันใช้git push <remote-name> tag <tag-name>เพื่อให้แน่ใจว่าฉันกำลังผลักดันแท็ก git push origin tag v1.0.1ฉันจะใช้มันที่ชอบ: รูปแบบนี้ขึ้นอยู่กับเอกสาร ( man git-push):

OPTIONS
   ...
   <refspec>...
       ...
       tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>.

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