ก็จะได้รับวิธีที่ง่ายซึ่งได้เก็บไว้พัฒนาใหม่ของคุณที่แยกต่างหากจากสาขาหลักโดยไม่ต้องนำคุณเข้าสู่สถานการณ์ที่โชคร้าย: การเปลี่ยนแปลงใด ๆ จากลำต้นควรจะได้รับรวมเข้าไปในสาขาการพัฒนาของคุณในชีวิตประจำวัน (เป็นลูกค้าของคุณจริงๆหรือว่าขาสั้นมากจนเขาไม่สามารถคาดหวังได้ว่าสาขาของคุณจำเป็นต้องได้รับการฝังกลับเข้าไปในสายหลักสักวัน?)
อย่างไรก็ตามวิธีที่ดีที่สุดคือ IMHO พยายามทำซ้ำสิ่งที่ควรเกิดขึ้นในมือแรก:
- ระบุความหมายของการเปลี่ยนแปลงในสายหลักสำหรับวันที่ 1หลังจากสาขาถูกสร้างขึ้น นำไปใช้กับฐานรหัสปัจจุบันของคุณเช่นเดียวกับที่คุณสามารถ ถ้ามันเป็น "การเปลี่ยนแปลงในท้องถิ่น" มันควรจะง่ายถ้ามันเป็น "cross cross refactoring" เช่นการเปลี่ยนชื่อคลาสที่ใช้กันอย่างแพร่หลายให้ใช้มันในลักษณะที่มีความหมายเทียบเท่ากับฐานรหัสปัจจุบันของคุณ หวังว่าในปีนั้นจะไม่มีการเปลี่ยนแปลงตัดขวางในฐานรหัสในสาขา "ของคุณ" มิฉะนั้นสิ่งนี้อาจกลายเป็นเครื่องมือพัฒนาสมองที่แท้จริง
- ทดสอบผลลัพธ์ (ฉันพูดถึงว่าคุณต้องการชุดทดสอบที่ดีสำหรับงานนี้) แก้ไขข้อบกพร่องทั้งหมดที่เปิดเผยโดยการทดสอบ
- ตอนนี้ทำซ้ำขั้นตอนนี้สำหรับการเปลี่ยนแปลงในสายหลักสำหรับวันที่ 2 จากนั้นวันที่ 3 และอื่น ๆ
สิ่งนี้อาจใช้งานได้เมื่อทีมปฏิบัติตามกฎคลาสสิคของการควบคุมเวอร์ชันอย่างเคร่งครัด ("ยอมรับสถานะที่คอมไพล์แล้วทดสอบ" และ "เช็คอินเร็วและบ่อยครั้ง")
หลังจากการทำซ้ำ 365 ครั้ง (หรือ 250 ถ้าคุณโชคดีและคุณสามารถรวมงานสำหรับการเปลี่ยนแปลงวันหยุดสุดสัปดาห์ได้) คุณจะเสร็จสิ้น (เกือบเพราะคุณต้องเพิ่มจำนวนการเปลี่ยนแปลงที่จะเกิดขึ้นกับสายหลักในช่วงระยะเวลาการรวม ) ขั้นตอนสุดท้ายคือการรวมสาขา dev ที่ได้รับการปรับปรุงเข้าไปในลำต้นอีกครั้ง (เพื่อให้คุณไม่หลวมประวัติของลำตัว) สิ่งนี้ควรเป็นเรื่องง่ายเพราะในทางเทคนิคแล้วควรเป็นเพียงการแทนที่ไฟล์ที่ได้รับผลกระทบ
และใช่ฉันจริงจังอาจไม่มีทางลัดสำหรับสิ่งนี้ อาจกลายเป็นว่า "ส่วนรายวัน" อาจเล็กเกินไป แต่ฉันไม่คาดหวังสิ่งนี้ฉันเดาว่าเป็นไปได้มากว่าส่วนรายวันอาจกลายเป็นผึ้งขนาดใหญ่เกินไป ฉันหวังว่าลูกค้าของคุณจะจ่ายให้คุณอย่างดีและสิ่งนี้มีราคาแพงมากสำหรับเขาที่เขาจะได้เรียนรู้จากความล้มเหลวของเขา
ฉันควรเพิ่มว่าคุณสามารถลองสิ่งนี้ได้เช่นกันด้วยการสลับข้าง - รวมการเปลี่ยนแปลงใหม่จากสาขาของคุณในส่วนเล็ก ๆ ไปยังบรรทัดหลัก สิ่งนี้อาจจะง่ายกว่านี้เมื่ออยู่บน dev สาขาของคุณมีการเปลี่ยนแปลงน้อยกว่าบน trunk มากหรือการเปลี่ยนแปลงส่วนใหญ่เกิดขึ้นในไฟล์ต้นฉบับใหม่ซึ่งปัจจุบันไม่ได้เป็นส่วนหนึ่งของ trunk เราสามารถเห็นสิ่งนี้ว่า "การย้าย" คุณสมบัติจากผลิตภัณฑ์ A (สาขา dev) ไปยังผลิตภัณฑ์ B ที่แตกต่างกันบ้าง (สถานะปัจจุบันของลำตัว) แต่ถ้าส่วนใหญ่ของ refactorings cross-cutting เสร็จแล้วในบรรทัดหลักและพวกเขาส่งผลกระทบต่อรหัสใหม่ของคุณ (การชนกันของการรวม 6500 ดูเหมือนจะเป็นหลักฐานบางอย่างสำหรับเรื่องนี้) มันอาจง่ายกว่าที่ฉันอธิบายไว้ก่อน