ตั้งแต่ฉันสร้างที่เก็บของฉันปรากฏว่าแท็กที่ฉันสร้างไม่ได้ถูกผลักไปยังที่เก็บ เมื่อฉันทำgit tag
ในไดเรกทอรีท้องถิ่นแท็กทั้งหมดที่มีอยู่ แต่เมื่อฉันเข้าสู่ระบบที่เก็บระยะไกลและทำgit tag
เพียงไม่กี่คนแรกที่ปรากฏขึ้น
มีปัญหาอะไรบ้าง
ตั้งแต่ฉันสร้างที่เก็บของฉันปรากฏว่าแท็กที่ฉันสร้างไม่ได้ถูกผลักไปยังที่เก็บ เมื่อฉันทำgit tag
ในไดเรกทอรีท้องถิ่นแท็กทั้งหมดที่มีอยู่ แต่เมื่อฉันเข้าสู่ระบบที่เก็บระยะไกลและทำgit tag
เพียงไม่กี่คนแรกที่ปรากฏขึ้น
มีปัญหาอะไรบ้าง
คำตอบ:
คุณสามารถทำได้:
git push --tags
git push --tags
เนื่องจากอาจเป็นการยากที่จะกำจัดแท็กที่ไม่ดีเมื่อเพื่อนร่วมงานของคุณได้รับการฝึกฝนให้กดแท็กทั้งหมดเนื่องจากผู้คนยังคงผลักแท็กเก่าที่มีอยู่ ต้องการผลักดันแท็กใหม่ด้วยเหตุนี้ฉันจึงขอแนะนำให้ทุกคนใช้git push origin <tag_name>
ตอนนี้เท่านั้น " - คัดลอกจากstackoverflow.com/a/5195913/4130619
ในการกำหนดค่าเริ่มต้นจากระยะไกล Git คุณจะต้องกดแท็กอย่างชัดเจน (ในขณะที่แท็กนั้นจะถูกดึงข้อมูลโดยอัตโนมัติพร้อมกับคอมมิทพวกเขาชี้ไปที่) คุณต้องใช้
$ git push <remote> tag <tagname>
เพื่อผลักดันแท็กเดียวหรือ
$ git push <remote> --tags
เพื่อผลักดันแท็กทั้งหมด (หรือgit push --tags
กดเพื่อรีโมตเริ่มต้นตามปกติorigin
)
สิ่งนี้เป็นพฤติกรรมที่ตั้งใจไว้มาก การกดแท็กควรเป็นทางเลือกที่ใส่ใจ
สรุปสิ่งที่ Junio C. Hamano เขียน (เชื่อมโยงในความคิดเห็นโดย @Andre Miras)
เมื่อดึงข้อมูลคุณกำลังโต้ตอบกับที่เก็บข้อมูลระยะไกลที่มีคนเผยแพร่ซึ่งหมายความว่า:
- ชุดแท็กที่มีอยู่มีผู้เผยแพร่ทั้งหมดต้องการให้คนดูและ
- ไม่เพียง แต่คุณเท่านั้น แต่คนอื่น ๆ จะเห็นแท็กเดียวกันด้วย
กล่าวอีกนัยหนึ่งแท็กในที่เก็บที่คุณดึงข้อมูลได้รับการออกแบบให้เป็นแบบสาธารณะและแชร์ มันจะอำนวยความสะดวกในการติดต่อสื่อสารระหว่างนักพัฒนาหากทุกคนสามารถดึงแท็กเดียวกันนี้ได้ง่าย
นั่นเป็นเหตุผลที่git fetch
แท็ก "ติดตาม" โดยอัตโนมัตินั่นคือการดาวน์โหลดแท็กเมื่อดาวน์โหลดการแก้ไขที่ชี้ไปที่ - ในคำอื่น ๆ จะดาวน์โหลดแท็กที่เผยแพร่ที่เกี่ยวข้องทั้งหมด
เมื่อผลักคุณกำลังผลักดันจากพื้นที่เก็บข้อมูลการทำงานของคุณซึ่งส่วนใหญ่ไม่ได้เป็นสาธารณะและแท็กในพื้นที่เก็บข้อมูลที่ไม่ได้รับการออกแบบให้เป็นที่สาธารณะ คุณสามารถใช้แท็กท้องถิ่นของคุณเองเพื่อทำเครื่องหมายความคืบหน้าของคุณดังนั้นจึงไม่มีความจำเป็นที่จะต้องผลักดันแท็กทั้งหมดในที่เก็บของคุณไปยังที่เก็บที่คุณกำลังผลักดันเพื่อเผยแพร่การเปลี่ยนแปลงของคุณ
นั่นเป็นเหตุผลที่คุณต้องกดแท็กอย่างชัดเจนเพื่อทำเครื่องหมายแท็กเป็นสาธารณะ
หรือคุณสามารถกำหนดค่ารีโมตที่คุณกดเพื่อผลักแท็กทั้งหมดได้เสมอเช่นใส่อะไรแบบนั้นลงใน.git/config
:
[remote "เผยแพร่"] # หรือชื่ออื่น url = ... push = + refs / heads / *: refs / heads / * push = + refs / tags / *: refs / tags / *
ซึ่งหมายความว่าบังคับให้กดหัวทั้งหมด (ทุกสาขา) และแท็กทั้งหมด (ถ้าคุณไม่ต้องการบังคับให้กดหัวให้นำ '+' คำนำหน้าออกจาก refspec)
โปรดทราบว่าตั้งแต่git 1.8.3 (22 เมษายน 2013)คุณไม่จำเป็นต้องทำ 2 คำสั่งในการพุชกิ่งและกดแท็ก:
ใหม่ "
--follow-tags
ตัวเลือก" บอก "git push
" เพื่อผลักดันแท็กข้อเขียนที่เกี่ยวข้องเมื่อผลักดันสาขาออก
คุณสามารถลองได้แล้วเมื่อกดคอมมิทใหม่:
git push --follow-tags
ว่าจะไม่ผลักดันทุกแท็กท้องถิ่น แต่เพียงข้อเขียนgit push
คนอ้างอิงโดยกระทำซึ่งจะผลักดันให้กับ
สิ่งนี้ได้ถูกนำมาใช้ในการคอมมิชชัน c2aba15โดยJunio C Hamano ( gitster
) :
ตัวเลือกใหม่ "
--follow-tags
" บอก "git push
" เพื่อผลักดันแท็กที่มีคำอธิบายประกอบที่หายไปจากอีกด้านหนึ่งและสามารถเข้าถึงได้โดยประวัติที่ถูกผลักออกมาตัวอย่างเช่นหากคุณใช้การกด "
simple
", "current
" หรือ "upstream
" คุณจะดันประวัติที่นำไปสู่การคอมมิทที่ปัจจุบันของคุณHEAD
และไม่มีอะไรอื่น
ด้วยตัวเลือกนี้คุณจะผลักดันแท็กที่มีคำอธิบายประกอบทั้งหมดที่สามารถเข้าถึงได้จากการส่งไปยังอีกด้านหนึ่ง
การกำหนดค่าpush.followTags
อนุญาตให้รวม--follow-tags
โดยค่าเริ่มต้น (Git 2.4.1+, Q2 2015) ดู " กดคอมไพล์และแท็กพร้อมกัน "
git push --follow-tags
ไม่ได้ผลักดันมากไปกว่าgit push
สิ่งที่ฉันมักจะทำคือ:
[remote "เผยแพร่"] # หรือชื่ออื่น url = ... push =: push = + refs / tags / *: refs / tags / *
หมายความว่ามันดันทุกสาขาที่มีอยู่แล้วพร้อมแท็ก มันไม่ได้บังคับให้ดันและมันก็ไม่ได้ผลักสาขาที่คุณไม่ได้กดด้วยตนเอง
และหากคุณต้องการดึงแท็กทั้งหมดคุณสามารถตั้งค่าในการกำหนดค่าโดย:
git config remote.origin.tagopt --tags
จากเอกสาร:
การตั้งค่านี้เป็น - no-tags ปิดใช้งานแท็กอัตโนมัติต่อไปนี้เมื่อดึงข้อมูลจากระยะไกล การตั้งค่าเป็น - แท็กจะดึงทุกแท็กจากระยะไกลแม้ว่าจะไม่สามารถเข้าถึงได้จากส่วนหัวสาขาระยะไกล ผ่านการตั้งค่าสถานะเหล่านี้โดยตรงเพื่อ git-fetch (1) สามารถแทนที่การตั้งค่านี้ ดูตัวเลือก - แท็กและ - ไม่มีแท็กของ git-fetch (1)
git push --follow-tags
ตอนนี้สามารถเป็นประโยชน์ดูคำตอบของฉันด้านล่าง