มันเป็นสถานการณ์ทั่วไปที่ codebase ของผลิตภัณฑ์ที่เก็บโดยที่เก็บในระบบ VCS บางระบบจะวิวัฒนาการไปจนถึงจุดที่ codebase นั้นสามารถมองเห็นได้ว่ามีหลายผลิตภัณฑ์ การแยกรหัสฐานข้อมูลออกจากที่เก็บข้อมูล VCS หลายแห่งซึ่งแต่ละแห่งสำหรับผลิตภัณฑ์เดียวสามารถใช้ประโยชน์ได้หลายอย่าง (ดูประโยชน์ของการมีผลิตภัณฑ์ต่อที่เก็บ VCS ผ่านแบบจำลองพื้นที่เก็บข้อมูลด้านล่าง) ในด้านเทคนิคการแยก codebase นั้นเป็นขั้นตอนที่ค่อนข้างง่ายเนื่องจาก VCS ส่วนใหญ่สนับสนุนการดำเนินการนี้ แยก แต่อาจเพิ่มขึ้นปัญหาทางวิศวกรรมที่เกี่ยวข้องกับการทดสอบแบบอัตโนมัติ, การส่งมอบอย่างต่อเนื่องบูรณาการบริการหรือการตรวจสอบ (ดูปัญหาที่เกิดขึ้นโดยแยก.) องค์กรที่วางแผนที่จะดำเนินการแยกดังกล่าวจึงจำเป็นต้องทราบวิธีดำเนินการเปลี่ยนแปลงนี้อย่างราบรื่นที่สุดเท่าที่จะเป็นไปได้นั่นคือโดยไม่รบกวนการส่งมอบและการติดตามตรวจสอบ ขั้นตอนแรกของเรื่องนี้น่าจะเข้าใจแนวคิดของโครงการได้ดีขึ้นและวิธีแยกวิเคราะห์ใน codebase ขนาดใหญ่
ในคำตอบของคำถามนี้ฉันต้องการจะดู:
ความพยายามที่จะให้คำจำกัดความการทำงานของผลิตภัณฑ์คืออะไรซึ่งจะให้เกณฑ์ที่ใช้งานได้จริงเพื่อวิเคราะห์ผลิตภัณฑ์ใน codebase ที่มีอยู่
ตามคำจำกัดความการทำงานนี้ทำอย่างละเอียดแผนที่ดำเนินการแยกจริง เราสามารถทำให้ลดความซับซ้อนของสมมติฐานว่า codebase มีการประมวลผลโดยอัตโนมัติSDLCการดำเนินการอย่างต่อเนื่องบูรณาการและต่อเนื่องการจัดส่ง นั่นคือแต่ละสาขาได้รับการตรวจสอบความถูกต้องโดยการทดสอบอัตโนมัติที่นำไปใช้ใน codebase ปัจจุบันและแต่ละการผสานกับสาขา“ เวทมนต์” บางอย่างจะสร้างสิ่งประดิษฐ์ผลิตภัณฑ์ที่ได้รับการทดสอบและปรับใช้ ( สิ่งประดิษฐ์สินค้าเป็นเช่น tarballs แหล่งที่มาของเอกสาร, ซอฟแวร์ไบนารีเทียบท่าภาพ Amis, unikernels.)
แผนดังกล่าวเป็นที่น่าพอใจหากจะอธิบายวิธีการหลีกเลี่ยง
ปัญหาที่เกิดจากการแยก
ขั้นตอนการทดสอบอัตโนมัติเกี่ยวข้องกับที่เก็บเสาหินที่มีอยู่แล้วและที่เก็บแยกอย่างไร
ขั้นตอนการปรับใช้อัตโนมัติเกี่ยวข้องกับที่เก็บเสาหินที่มีอยู่แล้วและที่เก็บแยกอย่างไร
เก็บรหัสไว้สำหรับกระบวนการปรับใช้อัตโนมัติด้วยตนเองที่ไหน
ไหนจะถูกเก็บไว้โครงสร้างพื้นฐาน , การตรวจสอบและความพร้อมสูงกลยุทธ์?
วิธีการตรวจสอบให้แน่ใจว่านักพัฒนาซอฟต์แวร์ต้องการโค้ดเบสครั้งละหนึ่งรายการเท่านั้น (แต่เป็นไปได้ที่จะใช้สิ่งประดิษฐ์จากโค้ดอื่น ๆ )
เครื่องมือเช่นgit-bisectสามารถทำได้อย่างไร
หมายเหตุ: ประโยชน์ของการมีผลิตภัณฑ์ต่อที่เก็บ VCS ผ่านโมเดลพื้นที่เก็บข้อมูล bloat
การมีที่เก็บข้อมูลขนาดเล็กจำนวนมากที่ถือครอง codebase สำหรับผลิตภัณฑ์เฉพาะนั้นมีข้อดีดังต่อไปนี้ในวิธีการ "พื้นที่เก็บข้อมูล bloat":
ด้วยพื้นที่เก็บข้อมูลขนาดเล็กมันเป็นเรื่องยากที่จะย้อนกลับการเปิดตัวเมื่อผลิตภัณฑ์ไม่เสถียรเพราะประวัติผสมกับประวัติผลิตภัณฑ์อื่น ๆ
ด้วยพื้นที่เก็บข้อมูลขนาดเล็กทำให้ยากต่อการตรวจสอบประวัติโครงการหรือการดึงข้อมูลด้วยที่เก็บขนาดเล็กเรามีแนวโน้มที่จะอ่านข้อมูลนี้มากขึ้น (นี่อาจเฉพาะเจาะจงกับ VCS เช่น git ซึ่งต่างจาก svn เราไม่สามารถชำระเงินย่อยได้!)
ด้วยพื้นที่เก็บข้อมูลที่ขยายตัวเราต้องทำการฟ้อนรำของสาขามากขึ้นเมื่อเราพัฒนา หากเรามีที่เก็บข้อมูล N เราสามารถทำงานแบบขนานบนสาขา N หากเรามีที่เก็บเพียง 1 แห่งเราสามารถทำงานในสาขาเดียวหรือมีสำเนางานที่โหลดซึ่งยุ่งยากในการจัดการ
ด้วยที่เก็บขนาดเล็กหลายแห่งบันทึกจะให้แผนผังความร้อนของโครงการ พวกเขายังสามารถใช้เป็นพร็อกซีของการกระจายความรู้ในทีมงาน dev: ถ้าฉันไม่ได้ทำ repo X ตั้งแต่ 3 เดือนมันก็ดีที่จะมอบหมายให้ฉันในทีมที่ทำงานเกี่ยวกับ repo X เพื่อให้ฉันตระหนักถึงการพัฒนา ในองค์ประกอบนั้น
ด้วยที่เก็บขนาดเล็กทำให้ง่ายต่อการรับภาพรวมที่ชัดเจนของส่วนประกอบ ถ้าทุกอย่างเป็นไปในพื้นที่เก็บข้อมูลขนาดใหญ่เดียวไม่มีสิ่งประดิษฐ์ที่มีตัวตนโทบี้แต่ละองค์ประกอบและ codebase สามารถดริฟท์ที่มีต่อลูกใหญ่ของโคลน
ที่เก็บข้อมูลขนาดเล็กบังคับให้เราทำงานบนส่วนต่อประสานระหว่างส่วนประกอบ แต่เนื่องจากเราต้องการการสะสมที่ดีนี่เป็นงานที่เราควรทำต่อไปดังนั้นฉันจึงนับว่านี่เป็นข้อดีสำหรับที่เก็บข้อมูลขนาดเล็ก
ด้วยที่เก็บข้อมูลขนาดเล็กหลายแห่งทำให้ง่ายต่อการมีเจ้าของผลิตภัณฑ์หลายคน
ด้วยที่เก็บขนาดเล็กหลายแห่งจะง่ายกว่าที่จะมีมาตรฐานรหัสแบบง่าย ๆ ที่เกี่ยวข้องกับที่เก็บข้อมูลแบบเต็มและสามารถตรวจสอบได้โดยอัตโนมัติ