ผมมีโครงการที่มีการแตกแขนงคอมไพล์รูปแบบที่ประมาณดังนี้ว่าnvie ของคอมไพล์ไหล
สาขาที่วางจำหน่ายของเรามีชื่ออยู่ในรูปแบบของSemVerเช่นv1.5.2
เมื่อสาขาย่อยได้รับไฟสีเขียวเพื่อการผลิตเราจะปิดสาขาโดยรวมมันเข้ากับต้นแบบใช้แท็กแล้วลบสาขา
เมื่อเราลบสาขาที่วางจำหน่ายทันทีเราได้ใช้ตัวระบุเดียวกันสำหรับการติดแท็กสาขาเช่น v1.5.2
นี่คือคำสั่งที่เราใช้ปิดสาขาที่วางจำหน่าย:
$ git checkout master
$ git merge v1.5.2
$ git tag -a v1.5.2 -m "Version 1.5.2 - foo bar, baz, etc"
$ git branch -d v1.5.2
$ git branch -dr origin/v1.5.2
$ git push origin :v1.5.2
$ git push
$ git push --tags
ดูเหมือนว่าจะทำงานได้ในกรณีส่วนใหญ่อย่างไรก็ตามเป็นสาเหตุของปัญหาในสถานการณ์ที่อินสแตนซ์อื่นของ git repo (เช่นเครื่อง dev อื่นหรือสภาพแวดล้อมการจัดเตรียม) มีการชำระเงินในท้องถิ่นของสาขา v1.5.2
git push origin :v1.5.2
คำสั่งจะลบสาขาในระยะไกล แต่ไม่ได้ลบรุ่นท้องถิ่นของสาขา (ถ้ามี) ใน Repos ทั้งหมด
สิ่งนี้นำไปสู่การอ้างอิงที่คลุมเครือเมื่อลองชำระเงินv1.5.2
ใน repos เหล่านั้น:
$ git checkout v1.5.2
warning: refname 'v1.5.2' is ambiguous.
สามารถหลีกเลี่ยงได้โดยไม่ใช้ไวยากรณ์ที่แตกต่างกันสำหรับกิ่งเช่นrelease-v1.5.2
หรือv1.5.2-rc
?
หรือเป็นสิ่งที่หลีกเลี่ยงไม่ได้และดังนั้นจึงเป็นความคิดที่ไม่ดีในการสร้างแท็กที่มีชื่อเดียวกับสาขาที่ถูกลบ?
git checkout
จะตรวจสอบแท็กกว่าสาขาเมื่อมีการอ้างอิง ambigious ไม่ทั้งหมดเรียนอย่างไรก็ตามเรื่องนี้ไม่ได้เป็นพฤติกรรมที่ฉันเห็น Ref: gist.github.com/tommarshall/9376724 นี่เป็นบางสิ่งที่เปลี่ยนแปลงไปในเวอร์ชั่นที่ทันสมัยกว่าหรือไม่? มีธงที่ฉันสามารถตั้งค่าgitconfig
เพื่อให้ได้พฤติกรรมนี้หรือไม่?