มีแบบแผนการตั้งชื่อมาตรฐานสำหรับแท็ก git หรือไม่ [ปิด]


229

ฉันเคยเห็นโครงการจำนวนมากที่ใช้v1.2.3เป็นแบบแผนการตั้งชื่อแท็กในคอมไพล์ 1.2.3ผมเคยเห็นยังใช้บางส่วน มีสไตล์การรับรองอย่างเป็นทางการหรือมีข้อโต้แย้งที่ดีสำหรับการใช้อย่างใดอย่างหนึ่ง?


19
ด้วย 43 upvotes และการนับฉันสงสัยว่าคำถามนี้มีค่ามากสามารถ reworded และเปิดใหม่ด้วยคำตอบบางคำรวมจุดทั้งหมดในบทสรุปที่ดีและอยู่ด้านบนหรือไม่ @ PeterEisentraut ดูเหมือนว่าจะสมบูรณ์ที่สุด ในขณะที่คำตอบที่ยอมรับ ATM ดูเหมือนจะทำให้เข้าใจผิดเล็กน้อย (ฉันคิดว่าฉันจะใช้ v1.2.3 สำหรับแท็กตัวเองหลังจากอ่านคะแนนทั้งหมด)
HostileFork บอกว่าอย่าเชื่อถือ SE

1
ดังนั้นสำหรับการแก้ไขรหัส แนวทางปฏิบัติที่ดีที่สุดปรากฏว่าเป็นของsoftwareengineering.stackexchange.comหรือcodereview.stackexchange.com
Cees Timmerman

ลองดูที่semver.org (การกำหนดเวอร์ชันความหมาย) ที่จะให้ความคิดกับคุณ
vonbrand

ประสบการณ์ของฉันบอกให้ฉันใช้รูปแบบที่แตกต่างกันเล็กน้อย 1. ไดเรกทอรีย่อย: แท็กGitอย่างน้อยควรเริ่มต้นด้วยv/แท็กกลุ่มนี้ในเนมสเปซ 2. ในอุดมคติแท็กควรมีตัวย่อที่ระบุแอปโดยเฉพาะ v/myapp/1.0เช่น สิ่งนี้ทำให้การรวมพื้นที่เก็บข้อมูล git ง่ายขึ้น: ในกรณีที่มีการรวมแอพเข้าด้วยกันแท็กจะไม่ชนกันในเนมสเปซของแท็ก
axd

คำตอบ:


166

เวอร์ชั่น 1.0.0 ของSemantic Versioningโดย Tom Preston-Werner of GitHub fame มีsub-Specificationที่กล่าวถึงเรื่องนี้:

ข้อกำหนดการติดแท็ก (SemVerTag)

ข้อมูลจำเพาะย่อยนี้ควรใช้หากคุณใช้ระบบควบคุมเวอร์ชัน (Git, Mercurial, SVN, ฯลฯ ) เพื่อจัดเก็บรหัสของคุณ การใช้ระบบนี้ช่วยให้เครื่องมืออัตโนมัติตรวจสอบแพ็คเกจของคุณและพิจารณาการปฏิบัติตามข้อกำหนดของ SemVer และรุ่นที่วางจำหน่าย

  1. เมื่อแท็กรุ่นในระบบการควบคุมเวอร์ชันที่แท็กสำหรับรุ่นที่จะต้อง "vX.YZ" เช่น "v3.1.0"

อย่างไรก็ตามหลังจากการสนทนานี้ถูกลบและจะไม่ปรากฏในข้อมูลจำเพาะของ SemVer เวอร์ชันล่าสุดอีกต่อไป(2.0.0 ณ เวลาที่เขียน) หัวข้อสนทนาในภายหลังในสถานที่เดียวกันมีความลึกมากขึ้นและส่งผลให้เกิด"v1.2.3" รุ่นความหมายใหม่หรือไม่ การเพิ่มคำถามที่พบบ่อยในmasterสาขาของ SemVer แม้ว่าในเวลาที่เขียน (มากกว่า 2 ปีต่อมา) การเปลี่ยนแปลงนี้ยังไม่ปรากฏในข้อมูลจำเพาะที่วางจำหน่ายอย่างเป็นทางการ


9
ขอบคุณ - นั่นใกล้มาก ฉันหวังว่าเขาจะต้องผ่านการรับรองว่าทำไมvควรจะมี แต่
troelskn

3
@troelskn @mojombo == Tom Preston-Werner
ครั้งที่

4
อัปเดตลิงค์: github.com/mojombo/semver.org/issues/1
Josh Lee

41
การกำหนดเวอร์ชัน Semantic 1.0.0 ใช้รูปแบบ "v1.2.3" การกำหนดเวอร์ชันเชิงความหมาย 2.0.0-rc.1 อาจใช้รูปแบบ "1.2.3" บทความข้อกำหนดการติดแท็ก (SemVerTag) ถูกลบออกจากข้อกำหนด เพิ่มเติมได้ที่นี่: semver.org
petrnohejl

9
คำตอบนี้ทำเมื่อมี semver เก่า (รุ่น 1.0) ทุกวันนี้คำนำหน้า 'v' ถูกลบออกจาก semver v2.0 สำหรับรายละเอียดดูโพสต์ด้านล่าง
vitalii

111

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

  • v1.2.3
  • 1.2.3

ข้อดีของการv1.2.3ที่เอกสาร Git (และเอกสาร Mercurial) ใช้รูปแบบนั้นในตัวอย่างและ "อำนาจ" หลายอย่างเช่นเคอร์เนล LinuxและGitเองใช้ (การกำหนดความหมายแบบ Semanticใช้เพื่อใช้งาน แต่จะไม่เพิ่มอีก)

ข้อดีของการ1.2.3ที่ gitweb หรือ GitHub สามารถเสนอการดาวน์โหลด tarball หรือ zip ของแบบฟอร์มโดยอัตโนมัติpackagename-$tag.tar.gz(และฉันคิดว่ามันค่อนข้างเป็นที่ยอมรับว่าไม่ควรตั้งชื่อtarball package-v1.2.3.tar.gz) หรือคุณสามารถใช้git describeโดยตรงเพื่อสร้างหมายเลขรุ่น tarball สำหรับโครงการที่มีน้ำหนักเบาที่ไม่มีกระบวนการเปิดตัวอย่างเป็นทางการความเป็นไปได้เหล่านี้ค่อนข้างสะดวก ควรสังเกตว่า Semantic Versioning นั้นไม่ได้เป็นเพียงมาตรฐานเดียวที่เป็นที่ยอมรับในระดับสากลสำหรับการกำหนดหมายเลขเวอร์ชัน และโครงการเด่น ๆ เช่น GNOME และโครงการอื่น ๆ อีกนับไม่ถ้วนใช้การ1.2.3ตั้งชื่อแท็ก

ฉันคิดว่ามันอาจจะสายเกินไปที่จะรวบรวมตำแหน่งเหล่านี้ เช่นเคยมีความสอดคล้องและมีเหตุผล


ปรับปรุง: เป็นที่กล่าวถึงในนี้แสดงความคิดเห็น GitHub ตอนนี้มีชื่อ tarball กับ 'วี' ถอดของแท็ก


13
เกี่ยวกับ GitHub และการสร้าง tarball: มันไม่เกี่ยวข้องอีกต่อไป พวกเขาตัด 'v' ออกจากแท็ก
Hermann Bier

6
คำนำหน้า 'v' นั้นค่อนข้างมีประโยชน์เมื่อเรียงลำดับแท็กตามลำดับตัวอักษร แท็กอื่น ๆ อาจมีอยู่; ไม่ว่าจะเป็นทางการในที่เก็บข้อมูลหลักหรือเพื่อติดตามงานของนักพัฒนาในพื้นที่ ด้วยคำนำหน้า 'v' แท็กปล่อยจะสร้างกลุ่มของตัวเองแทนที่จะกระจัดกระจายไปทั่วส่วนที่เหลือของเนมสเปซ
Robie Basak

1
ปรับปรุงคำตอบที่จะสะท้อนให้เห็นว่า SemVer vใช้ไม่ได้
Adam Spires

80

เหตุผลสำหรับการ 'v' ก่อนหน้านี้เป็นประวัติศาสตร์ SCCS ที่เก่ากว่า (cvs, rcs) ไม่สามารถแยกความแตกต่างระหว่างตัวระบุแท็กและหมายเลขการแก้ไข ตัวระบุแท็กถูก จำกัด ให้ไม่เริ่มต้นด้วยค่าตัวเลขเพื่อให้สามารถตรวจพบหมายเลขการแก้ไข


5
+1: คำตอบแรกที่ดีและชื่อจากหนังสือเล่มโปรดของฉัน :-) บางทีคำตอบต่อไปของคุณอาจเป็นคำถามปัจจุบันมากกว่า
Johnsyweb

1
... แต่ถ้านี่เป็นจริงสำหรับSVCS รุ่นเก่าจะเกิดอะไรขึ้นถ้าประเด็นคำตอบนี้มีคำถามเกี่ยวกับ Git สมัยใหม่
MestreLion

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

19

ไม่ใช่ที่ฉันรู้
แต่ Git จะไม่อนุญาตให้ใช้แท็กและสาขาที่มีชื่อเดียวกันในเวลาเดียวกันดังนั้นหากคุณมีสาขา " 1.1" สำหรับ1.1งานอย่าใส่แท็ก " 1.1" ใช้เป็นตัวอย่าง " v1.1"


8
ใช้สำหรับสาขา 1.1.x แค่นั้นแหละ.
vitalii

1
จับได้ดีขอบคุณ
RY

10

ผู้จัดการแพคเกจใหม่แนะนำให้ติดแท็กเวอร์ชันโดยไม่มีคำนำหน้าv(เช่นผู้แต่งสำหรับโครงการ PHP) SemVer 2.0ไม่มีอะไรเกี่ยวกับสเปคแท็ก มันทำโดยเจตนาเนื่องจากหลีกเลี่ยงความขัดแย้ง อย่างไรก็ตามขอแนะนำให้เพิ่มคำนำหน้าvในเอกสารและข้อความอ้างอิง เป็นรูปแบบตัวอย่างv1.0.4แทนที่จะเป็นแบบเต็มversion 1.0.4หรือver. 1.0.4เพียงพอและ verbose และสง่างามในเอกสาร


22
“ แนะนำให้…” แนะนำโดยใครและเราจะเห็นคำแนะนำนั้นในบริบทดั้งเดิมได้ที่ไหน?
bignose

8

เราใช้ branch และ tags สำหรับงานเฉพาะรุ่นตามด้วยรุ่นจริงตามลำดับ:

o---o-----o---o---o--- ...   master
     \   /       /
      \ /       /
       o-------o--- ...      1.6 branch

นักพัฒนาทุกคนตัดสินใจอย่างรอบคอบว่างานที่พวกเขากำลังจะทำนั้นมีผลบังคับใช้กับผู้เชี่ยวชาญหรือไม่หรือเกี่ยวข้องกับสาขาด้วย คุณสามารถเห็นได้ว่าการเปลี่ยนแปลงที่ทำกับสาขานั้นจะถูกรวมกลับคืนบนต้นแบบ แต่การเปลี่ยนแปลงบางอย่างในต้นแบบจะไม่ดำเนินการกับสาขา (นั่นคือสิ่งที่ไม่ได้มีไว้สำหรับการเปิดตัว 1.6 ในตัวอย่างนี้)

เมื่อเราพร้อมที่จะวางจำหน่ายเราแท็กแท็กแล้วรวมกลับเป็นครั้งสุดท้ายและเราตั้งชื่อแท็กที่มีชื่อเดียวกันกับสาขา แต่มีตัวระบุพิเศษเกี่ยวกับเวอร์ชันเฉพาะเช่น "1.6 รีลีส" หรือ "1.6-beta" หรือ "1.6-rc2", และอื่น ๆ

... ------o---o---o--o---o--- ...   master
         /       /
        /       /
... ---o------(*)--- ...      1.6 branch
          1.6-release

ขอบคุณ - นี่เป็นคำตอบที่ดีสำหรับการอธิบายว่าคุณแยกทางกันอย่างไร แต่จริงๆแล้วฉันหมายถึงว่ามีเหตุผลเฉพาะทางเทคนิคสำหรับการใช้รูปแบบการตั้งชื่อบางอย่างใน git ยังให้ upvote สำหรับไดอะแกรมที่ดีแม้ว่า;)
troelskn

อ้า gotcha! ขออภัยที่เข้าใจผิดคำถามของคุณ ไม่ไม่มีเหตุผลทางเทคนิคเฉพาะสำหรับการใช้ชื่อเฉพาะนอกเหนือจากการสื่อสารของมนุษย์ คุณสามารถตั้งชื่อสาขาและแท็กของคุณได้ตามต้องการ
John Feminella

สาขา release-1.6 ของคุณชื่อ "1.6 branch"? ฉันคิดว่าช่องว่างไม่ได้รับการสนับสนุนในชื่อสาขา
Cees Timmerman

8

ฉันไม่รู้มาตรฐานใด ๆ ฉันเพียงแค่เลือกชื่อแท็กของฉันเช่นที่ฉันสามารถติด

VERSION = `git describe --tags`

ในสคริปต์การสร้างของฉัน ดังนั้นแบบแผนการตั้งชื่อแท็กจริง ๆ แล้วขึ้นอยู่กับแบบแผนการตั้งชื่อเวอร์ชันของโครงการ


1
git อธิบาย - แท็ก:>
ดาเมียนแครอล

1

ไม่มีเป็นหนึ่งในวิธีที่ดีที่สุดฉันรู้ นี่คือลิงค์บางส่วน:

โดยทั่วไปการกำหนดเวอร์ชัน ( 0.0.1,, v0.2.1... ) อาจจับมือกับการติดตามปัญหาบางอย่างอาจถือเป็นแนวทางที่น่าเชื่อถือ (.. ถึงแม้ว่าฉันมักจะใช้vชื่อแท็กที่ได้รับการแก้ไข .. ดูคำตอบ @VonC ด้วย)

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