คริสโตเฟอร์ทำได้ดีมากในการระบุข้อเสียของรูปแบบหนึ่งโครงการต่อที่เก็บ ฉันต้องการจะพูดถึงเหตุผลบางประการที่คุณอาจพิจารณาวิธีการเก็บหลาย ในหลาย ๆ สภาพแวดล้อมที่ฉันทำงานอยู่วิธีการเก็บหลาย ๆ ตัวเป็นวิธีการแก้ปัญหาที่สมเหตุสมผล แต่การตัดสินใจว่าจะมีที่เก็บข้อมูลจำนวนเท่าใดและตำแหน่งที่จะทำการตัดไม่ได้ง่าย ๆ
ในตำแหน่งปัจจุบันของฉันฉันได้ย้ายที่เก็บ CVS behemoth เดียวที่เก็บประวัติ CVS ที่มีประวัติมากกว่าสิบปีไปยังที่เก็บ git จำนวนหนึ่ง ตั้งแต่การตัดสินใจครั้งแรกจำนวนที่เก็บได้เพิ่มขึ้น (ผ่านการกระทำของทีมอื่น ๆ ) จนถึงจุดที่ฉันสงสัยว่าเรามีมากกว่าที่จะดีที่สุด การจ้างงานใหม่บางคนได้แนะนำการรวมที่เก็บ แต่ฉันได้โต้แย้งกับมัน โครงการ Wayland มีประสบการณ์ที่คล้ายคลึงกัน ในการพูดคุยที่ฉันเห็นเมื่อเร็ว ๆ นี้พวกเขามีที่เก็บของคอมไพล์มากกว่า 200 git ซึ่งผู้นำคนนั้นขอโทษ ดูที่เว็บไซต์ของพวกเขาฉันเห็นตอนนี้พวกเขาอยู่ที่ 5 ซึ่งดูเหมือนสมเหตุสมผล สิ่งสำคัญคือต้องสังเกตว่าการเข้าร่วมและการแยกที่เก็บข้อมูลเป็นงานที่จัดการได้และไม่ควรทดลอง (ด้วยเหตุผล)
ดังนั้นเมื่อใดที่คุณอาจต้องการที่เก็บหลายแห่ง
- ที่เก็บเดียวจะใหญ่เกินไปที่จะมีประสิทธิภาพ
- ที่เก็บของคุณอยู่คู่กันอย่างอิสระหรือแยกออกจากกัน
- โดยทั่วไปผู้พัฒนาต้องการเพียงหนึ่งหรือชุดย่อยของคลังเก็บขนาดเล็กของคุณในการพัฒนา
- โดยทั่วไปคุณต้องการพัฒนาที่เก็บข้อมูลอย่างอิสระและจำเป็นต้องซิงโครไนซ์มันเป็นครั้งคราวเท่านั้น
- คุณต้องการที่จะส่งเสริมให้เป็นโมดุลมากขึ้น
- ทีมที่แตกต่างกันทำงานในที่เก็บข้อมูลที่แตกต่างกัน
คะแนน 2 และ 3 มีความสำคัญต่อเมื่อถือ 1 แต้มเท่านั้น ด้วยการแยกที่เก็บของเราทำให้ฉันลดความล่าช้าอย่างมากจากเพื่อนร่วมงานนอกสถานที่ลดปริมาณการใช้ดิสก์และปรับปรุงการรับส่งข้อมูลเครือข่าย
4 และ 5 นั้นลึกซึ้งยิ่งขึ้น เมื่อคุณแบ่ง repos ของไคลเอนต์และเซิร์ฟเวอร์พูดมันทำให้ค่าใช้จ่ายเพิ่มเติมในการประสานงานการเปลี่ยนแปลงระหว่างไคลเอนต์และรหัสเซิร์ฟเวอร์ นี่อาจเป็นบวกเพราะนั่นเป็นการกระตุ้นให้อินเทอร์เฟซที่แยกระหว่างทั้งสอง
แม้ว่าจะมีข้อเสียของโครงการหลายพื้นที่เก็บข้อมูล แต่ก็มีงานน่านับถือมากมายที่ทำเช่นนั้น - ทางและเพิ่มขึ้นมาในใจ ฉันไม่เชื่อว่าฉันทามติเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดได้มีการพัฒนาและจำเป็นต้องมีการตัดสินบางอย่าง เครื่องมือสำหรับการทำงานกับที่เก็บหลายแห่ง (git-subtree, git-submodule และอื่น ๆ ) ยังคงได้รับการพัฒนาและทดลองใช้ คำแนะนำของฉันคือการทดสอบและปฏิบัติ