คุณควรรำคาญกับสาขา SVN หรือไม่ถ้าคุณมีสาขาเดียว?


10

หากเราทำงานกับสาขาเดียวในการโค่นล้มเราควรจะใส่ใจด้วยหรือไม่? เราไม่สามารถทำงานบนลำตัวเพื่อเร่งความเร็วของสิ่งต่างๆได้หรือไม่

นี่คือวิธีที่เราพัฒนาด้วยการโค่นล้ม:

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

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

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

ด้านล่างเป็นแผนภาพซึ่งควรชี้แจง:

กลยุทธ์การโค่นล้มของเรา

ตอนนี้มีความรู้สึกว่านี่ไม่ใช่วิธีการทำงานที่มีประสิทธิภาพที่สุด เราสร้างในพื้นที่ก่อนที่จะส่งมอบซึ่งใช้เวลาประมาณ 5-10 นาที คุณสามารถเข้าใจว่านี่เป็นประสบการณ์ที่ค่อนข้างรอเวลานาน

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

จากนั้นเมื่อคุณสมบัติ 1 เสร็จสิ้นจะถูกรวมเข้ากับลำต้น แต่มีคุณสมบัติบางอย่างรวมอยู่ด้วย 2

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

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


1
ฉันคิดว่ามันจะดีกว่าถ้าคุณมีสาขามากกว่าหนึ่งสาขา หนึ่งรายการสำหรับแต่ละคุณสมบัติ วิธีนี้หากคุณเริ่มทำงานกับคุณสมบัติที่มีขนาดใหญ่ซึ่งจะใช้เวลาสักครู่คุณจะไม่ระงับการแก้ไขข้อบกพร่องและเช่นสำหรับรุ่นที่วางจำหน่ายแล้ว
Amy Anuszewski

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

คำตอบ:


6

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

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


1
ฉันอยู่กับปีเตอร์ เรามีสาขาสำหรับแต่ละรุ่นที่รองรับ แต่อย่างอื่นทำงานในลำตัว นอกจากนี้เรายังใช้การรวมอย่างต่อเนื่อง แต่โปรดทราบว่าสิ่งนี้หมายถึงมันจะรวบรวมและไม่ว่ามันจะไม่ทำลายฟังก์ชั่นที่มีอยู่แม้จะมีการทดสอบหน่วย
เอียน

@Ian แน่นอนว่าไม่มีการทดสอบใด ๆ ที่สามารถมั่นใจได้ว่ารหัสนี้ปราศจากข้อผิดพลาด 100% ... มีทรัพยากรที่ จำกัด เรามุ่งมั่นในระดับความปลอดภัยที่เหมาะสม (คำจำกัดความซึ่งเป็นโดเมนและเฉพาะโครงการ) โปรดทราบว่า CI สามารถเรียกใช้การทดสอบแบบรวมและอื่น ๆ ได้เช่นกันไม่เพียง แต่การทดสอบหน่วย
PéterTörök

วิธีนี้ใช้งานได้จนกว่าจะล้มเหลว หากคุณจำเป็นต้องใช้การแก้ไขก่อนที่คุณสมบัติใหม่จะพร้อม ... หรือถ้าการเปิดตัวคุณลักษณะใหม่ไม่พร้อมสำหรับการใช้งานอย่างที่คุณคิดว่ามันยากที่จะสำรองการเปลี่ยนแปลงนั้นออกจากรหัสหากคุณไม่ได้ใช้การแยกสาขา
SoylentGray

@Chad แพตช์ไปสู่รีลีสล่าสุดจะทำที่สาขารีลีสที่สอดคล้องกันโดยไม่มีการรบกวนจากลำตัว และเราทดสอบคุณสมบัติใหม่อย่างครอบคลุมเพื่อให้เรารู้ว่าเมื่อใดที่พวกเขาพร้อมสำหรับเวลาสำคัญ เราได้รับคุณสมบัติที่ค่อนข้างใหญ่ในโครงการของเรา และเนื่องจากเป็นแอพพลิเคชั่นบนเว็บเซิร์ฟเวอร์จึงค่อนข้างง่ายแม้จะเพิ่มการตั้งค่าสถานะ DB เพื่อเลือกเปิด / ปิดคุณสมบัติ YMMV
PéterTörök

ฮ่า ๆ ตกลงฉันเข้าใจผิดและคิดว่าคุณเพิ่งมีลำตัว (มีข้อยกเว้นหนึ่งข้อ) ฉันใช้วิธีนี้เช่นกันมันดีสำหรับกลุ่มเล็ก ๆ และการปล่อยขนาดเล็กบ่อย ๆ มันไม่ได้ผลดีสำหรับเราที่ทำรุ่นใหญ่เป็นประจำ (3-6 เดือน ) ลำไส้ใหญ่
SoylentGray

1

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

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

วิธีการใดที่คุณใช้จริง ๆ จะขึ้นอยู่กับจำนวนการจัดการที่คุณสามารถทำได้ล่วงหน้า หากรุ่นทั่วไปไม่มีการพัฒนาแบบขนานจริงๆแล้วฉันจะใช้แนวทางที่สอง


ฉันเห็นด้วยและ OP ยืนยันสิ่งนี้ด้วย: 'บางครั้งคุณสมบัติเกือบพร้อมแล้วและนักพัฒนาบางคนจะเริ่มเขียนโค้ดคุณลักษณะถัดไปแล้ว ... '
Chris

ใช่ แต่เราไม่ต้องแนะนำใหม่ คุณลักษณะถูกนำมาใช้ตามลำดับเวลาและตัวอย่างเช่นคุณลักษณะ 1-4 ทั้งหมดจะต้องอยู่ในรุ่นถัดไป (พูด 1.0) เวลาเดียวที่อาจเป็นปัญหาได้คือเมื่อการพัฒนาเริ่มต้นในฟีเจอร์ 5 ซึ่งมีไว้สำหรับการเปิดตัวหลังจากนั้น (2.0) จากนั้นเราจะต้องตรวจสอบให้แน่ใจว่าการเปลี่ยนแปลงเหล่านี้ไม่ได้เกิดขึ้นในแท็ก / รีลีส (1.0) การสร้างสาขาก่อนการเปิดตัวจริง ๆ สามารถแก้ไขได้
Peter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.