อัปเดต 2019:
ทุกวันนี้คำถามจะเห็นได้จากบริบทโดยใช้ Git และ 10 ปีของการใช้เวิร์กโฟลว์การพัฒนาแบบกระจาย (ทำงานร่วมกันผ่าน GitHubเป็นหลัก) แสดงแนวทางปฏิบัติที่ดีที่สุดทั่วไป:
master
เป็นสาขาพร้อมที่จะนำไปใช้ในการผลิตในเวลาใด ๆ : master
รุ่นถัดไปกับชุดที่เลือกของสาขาคุณลักษณะรวมอยู่ใน
dev
(หรือสาขาการรวมหรือ ' next
') คือสาขาที่มีการทดสอบสาขาคุณลักษณะที่เลือกสำหรับรุ่นถัดไปร่วมกัน
maintenance
(หรือhot-fix
) branch เป็นสาขาสำหรับวิวัฒนาการของรุ่นปัจจุบัน / การแก้ไขข้อบกพร่องโดยมีการผสานกลับไปที่dev
และหรือmaster
ชนิดของเวิร์กโฟลว์ที่ (ที่คุณไม่ได้รวมdev
ไปmaster
แต่ที่คุณผสานเฉพาะสาขาคุณลักษณะdev
แล้วถ้าเลือกที่จะmaster
ในการสั่งซื้อเพื่อให้สามารถลดลงได้อย่างง่ายดายมีสาขาไม่พร้อมสำหรับการเปิดตัวถัดไป) จะดำเนินการใน Git repo ตัวเองด้วยgitworkflow (คำเดียวภาพประกอบที่นี่ )
ดูเพิ่มเติมได้ที่rocketraman/gitworkflow
. ประวัติความเป็นมาของการทำเช่นนี้ VS Trunk-based พัฒนาเป็นข้อสังเกตในการแสดงความคิดเห็นและการอภิปรายของบทความนี้โดยอดัม Dymitruk
(ที่มา: Gitworkflow: ไพรเมอร์เชิงงาน )
หมายเหตุ: ในเวิร์กโฟลว์แบบกระจายนั้นคุณสามารถคอมมิตเมื่อใดก็ได้ที่คุณต้องการและส่งไปยังสาขาส่วนบุคคล WIP (งานระหว่างดำเนินการ) โดยไม่มีปัญหา: คุณจะสามารถจัดระเบียบ (git rebase) คอมมิตของคุณใหม่ก่อนที่จะทำให้เป็นส่วนหนึ่งของสาขาฟีเจอร์
คำตอบเดิม (ต.ค. 2551 10+ ปีที่แล้ว)
ทุกอย่างขึ้นอยู่กับลักษณะตามลำดับของการจัดการรุ่นของคุณ
อย่างแรกทุกอย่างในหีบของคุณมีไว้สำหรับรุ่นต่อไปหรือไม่? คุณอาจพบว่าฟังก์ชันบางอย่างที่พัฒนาในปัจจุบัน ได้แก่ :
- ซับซ้อนเกินไปและยังต้องได้รับการขัดเกลา
- ไม่พร้อมในเวลา
- น่าสนใจ แต่ไม่ใช่สำหรับรุ่นถัดไปนี้
ในกรณีนี้ trunk ควรมีความพยายามในการพัฒนาในปัจจุบัน แต่สาขาการเผยแพร่ที่กำหนดไว้ก่อนหน้ารุ่นถัดไปสามารถทำหน้าที่เป็นสาขาการรวมซึ่งจะรวมเฉพาะรหัสที่เหมาะสม (ตรวจสอบความถูกต้องสำหรับรุ่นถัดไป) จากนั้นแก้ไขในช่วง homologation และในที่สุดก็ถูกแช่แข็งเมื่อเข้าสู่กระบวนการผลิต
เมื่อพูดถึงรหัสการผลิตคุณต้องจัดการสาขาแพตช์ของคุณด้วยในขณะที่โปรดทราบว่า:
- แพตช์ชุดแรกอาจเริ่มก่อนที่จะเผยแพร่ครั้งแรกในการผลิต (หมายความว่าคุณรู้ว่าคุณจะเข้าสู่การผลิตโดยมีข้อบกพร่องบางอย่างที่คุณไม่สามารถแก้ไขได้ทันเวลา แต่คุณสามารถเริ่มต้นการทำงานสำหรับจุดบกพร่องเหล่านั้นในสาขาที่แยกต่างหากได้)
- ส่วนแพทช์อื่น ๆ จะมีความหรูหราตั้งแต่ฉลากการผลิตที่กำหนดไว้อย่างดี
เมื่อพูดถึงสาขา dev คุณสามารถมีลำต้นเดียวได้เว้นแต่คุณจะมีความพยายามในการพัฒนาอื่น ๆ ที่คุณต้องทำควบคู่กันเช่น:
- การปรับโครงสร้างขนาดใหญ่
- การทดสอบไลบรารีทางเทคนิคใหม่ซึ่งอาจเปลี่ยนวิธีการเรียกสิ่งต่างๆในคลาสอื่น ๆ
- จุดเริ่มต้นของรอบการเปิดตัวใหม่ซึ่งจำเป็นต้องรวมการเปลี่ยนแปลงทางสถาปัตยกรรมที่สำคัญเข้าด้วยกัน
ตอนนี้หากวงจรการพัฒนาของคุณเป็นลำดับมากคุณสามารถทำตามคำตอบอื่น ๆ ที่แนะนำ: ลำต้นเดียวและหลายสาขาที่ปล่อยออกมา ใช้งานได้กับโครงการขนาดเล็กที่การพัฒนาทั้งหมดมั่นใจว่าจะเข้าสู่รุ่นถัดไปและสามารถถูกตรึงและใช้เป็นจุดเริ่มต้นสำหรับสาขาการเผยแพร่ซึ่งสามารถเกิดแพทช์ได้ นั่นคือกระบวนการเล็กน้อย แต่ทันทีที่คุณมีโครงการที่ซับซ้อนมากขึ้น ... มันก็ไม่เพียงพออีกต่อไป
เพื่อตอบความคิดเห็นของ Ville M. :
- โปรดทราบว่าสาขา dev ไม่ได้หมายถึง 'หนึ่งสาขาต่อผู้พัฒนา' (ซึ่งจะทำให้เกิด 'ผสานความบ้าคลั่ง' โดยที่นักพัฒนาแต่ละคนจะต้องผสานงานของผู้อื่นเพื่อดู / รับงานของตน) แต่สาขาการพัฒนาหนึ่งสาขาต่อการพัฒนา ความพยายาม
- เมื่อความพยายามเหล่านั้นจำเป็นต้องรวมกลับเข้าไปใน trunk (หรือ "main" หรือ release branch อื่น ๆ ที่คุณกำหนด) นี่คือผลงานของผู้พัฒนาไม่ใช่ - ขอย้ำไม่ใช่ - SC Manager (ที่ไม่รู้วิธีแก้ การผสานที่ขัดแย้งกัน) หัวหน้าโครงการอาจดูแลการผสานหมายความว่าต้องเริ่ม / เสร็จสิ้นตรงเวลา
- ไม่ว่าคุณจะเลือกใครสำหรับการผสานสิ่งที่สำคัญที่สุดคือ:
- เพื่อให้มีการทดสอบหน่วยและ / หรือสภาพแวดล้อมการประกอบซึ่งคุณสามารถปรับใช้ / ทดสอบผลลัพธ์ของการผสาน
- เพื่อกำหนดแท็กก่อนจุดเริ่มต้นของการผสานเพื่อให้สามารถกลับไปยังสถานะก่อนหน้าได้หากการผสานดังกล่าวพิสูจน์ตัวเองว่าซับซ้อนเกินไปหรือค่อนข้างนานในการแก้ไข