แบ่งปันบางส่วนของ monorepo


12

ขณะนี้เรามีระบบการสร้างที่ซับซ้อนและไม่มีประสิทธิภาพซึ่งประกอบด้วย repos SVN และ Git จำนวนมาก (ประมาณ 50% ต่อรายการ) รวมถึงระบบที่เป็น repod submitules git เรายังมีสคริปต์แบบโฮมเมดที่จัดการสิ่งต่าง ๆ ได้ไม่มากก็น้อย
จุดสำคัญของโค้ดเบสของเรา (แหล่งปิด) คือมันมีการเชื่อมโยงอย่างแน่นหนาและทุกโครงการจะถูกปล่อยออกมาในเวลาเดียวกันภายใต้เวอร์ชันเดียวกัน

เราต้องการย้ายข้อมูลนี้ไปยังระบบที่ง่ายขึ้นและ VCS เดียวและกำลังพิจารณาตัวเลือกหลายอย่างรวมถึง: git submodules, google Repo และ monorepos VCS ขั้นสุดท้ายยังไม่ได้กำหนด (ยกเว้นตัวเลือกที่มอบอำนาจให้) และอาจเป็น svn คอมไพล์หรือแม้แต่อย่างอื่นถ้ามันจะเหมาะกับสถานการณ์ของเราดีขึ้น

เรากำลังพยายามแสดงรายการบวกและลบของแต่ละวิธีแก้ปัญหาและหนึ่งในปัญหาสำคัญที่เรามีในขณะนี้คือ monorepos ว่ามันดูไม่ง่ายหรือเป็นไปได้ที่จะแบ่งปันเพียงบางโมดูลให้กับหน่วยงานภายนอก เราต้องการให้คนเหล่านั้นสามารถชำระเงินและทำงานได้ตามปกติในโมดูลเหล่านั้น แต่ไม่สามารถเข้าถึงรหัสหรือประวัติส่วนที่เหลือของ repo มันไม่ใช่สิ่งที่เราทำบ่อยครั้งหรืออย่างกว้างขวางในขณะนี้ แต่เราอาจจะเกิดขึ้นในอนาคตและเราไม่ต้องการให้เรื่องนี้กลายเป็นฝันร้ายเพราะเราตัดสินใจไม่ดีที่นี่

ระบบการจัดการสิทธิ์พิเศษนั้นมีอยู่ในระบบ VCS หรือไม่?
หรือมีวิธีใดที่จะบรรเทาปัญหานี้ได้บ้าง?


คุณจะพิจารณา Team Foundation Server หรือ Service หรือไม่? มีการสนับสนุน Git และมีขั้นตอนการทำงานที่ดีและความสามารถในการรวมอย่างต่อเนื่อง
hanzolo

การใช้ Monorepo แบบใดที่คุณกำลังพิจารณาอยู่
Dan Cornilescu

คำตอบ:


3

จากคำอธิบายของคุณฉันคิดว่าคุณมีตัวเลือกสองทางที่นี่:

  1. ใช้ git submodules - ด้วยบริการเช่น GitHub (หรืออะไรก็ได้) คุณสามารถจัดการการอนุญาตต่อโครงการและแยกแยะกระบวนการปรับใช้ของคุณ อย่างไรก็ตามฉันได้ยินมาว่า submodules คอมไพล์จบลงด้วยความเจ็บปวดครั้งใหญ่เมื่อเวลาผ่านไป สคริปต์อัตโนมัติสำหรับการเริ่มต้นใหม่ / การดาวน์โหลด submodules git ของคุณใหม่ทั้งหมดสามารถช่วยได้ที่นี่
  2. ทำลาย repo ของคุณเป็นบริการอิสระ สิ่งนี้ช่วยให้คุณพัฒนาพร้อมกัน แต่ยังแนะนำความเจ็บปวดจำนวนมากตามที่คุณต้องการเริ่มคิดเกี่ยวกับการค้นหาบริการการปรับใช้บริการหลายสภาพแวดล้อมการพัฒนาการรวม / ปรับใช้อย่างต่อเนื่องและความสุขเล็ก ๆ อื่น ๆ ที่มาจากการจัดการ สถาปัตยกรรมไมโครเซอร์วิส
  3. ใช้ระบบการจัดการแพคเกจอย่างเป็นทางการเช่น pip สำหรับ Python, npm สำหรับ Node.js, Maven สำหรับ Java, ฯลฯ ปรับใช้ชิ้นส่วนของรหัสที่คุณต้องการลงในพื้นที่เก็บข้อมูลและใช้ใน repo หลักของคุณตามความจำเป็นซึ่งจะทำให้คุณมีความสามารถ เพื่อรุ่นพวกเขา คุณอาจไม่สามารถแยกเรียกใช้หรือทดสอบโมดูลระดับล่างได้อย่างอิสระทั้งนี้ขึ้นอยู่กับการเชื่อมต่อระหว่างโมดูลของคุณกับ repo หลักของคุณ อย่างไรก็ตามหากคุณสามารถทำได้นี่เป็นวิธีที่ดีในการใช้เจลที่ดีกับที่เก็บข้อมูลหลาย ๆ แห่งในขณะที่ยังสามารถรวมแพ็คเกจของคุณในเวลาบิลด์โดยติดตั้งจากที่เก็บระยะไกล

น่าเสียดายที่ตัวเลือกเหล่านี้ไม่สมบูรณ์แบบ แต่ตัวเลือกทั้งหมดนั้นขึ้นอยู่กับสถานะของรหัสฐานข้อมูลของคุณ คำอธิบายของคุณดูเหมือนตัวเลือก 3 อาจทำงานได้ดีที่สุดที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.