ฉันเป็นแฟนตัวยงของGit ย่อยโมดูล ฉันชอบที่จะสามารถติดตามการพึ่งพาพร้อมกับเวอร์ชันเพื่อให้คุณสามารถย้อนกลับไปเป็นเวอร์ชันก่อนหน้าของโครงการของคุณและมีเวอร์ชันที่สอดคล้องกันของการพึ่งพาเพื่อสร้างอย่างปลอดภัยและเรียบร้อย ยิ่งไปกว่านั้นมันง่ายกว่าที่จะปล่อยไลบรารี่ของเราเป็นโครงการโอเพ่นซอร์สเนื่องจากประวัติของไลบรารี่นั้นแยกจากแอพพลิเคชั่นที่ขึ้นอยู่กับพวกมัน
ฉันกำลังตั้งค่าเวิร์กโฟลว์สำหรับหลายโครงการในที่ทำงานและฉันสงสัยว่ามันจะเป็นอย่างไรถ้าเราใช้วิธีนี้แบบสุดขั้วแทนที่จะมีโครงการเสาหินเดียว ฉันรู้อย่างรวดเร็วมีความสามารถที่มีศักยภาพของเวิร์มในจริงๆโดยใช้โมดูลย่อย
เผื่อว่าคู่ของการใช้งาน: studioและplayerและขึ้นอยู่กับห้องสมุดcore, graphและnetworkที่อ้างอิงมีดังนี้
coreเป็นแบบสแตนด์อโลนgraphขึ้นอยู่กับcore(โมดูลย่อยที่./libs/core)networkdepdends oncore(โมดูลย่อยที่./libs/core)studioขึ้นอยู่กับgraphและnetwork(โมดูลย่อยที่./libs/graphและ./libs/network)playerขึ้นอยู่กับgraphและnetwork(โมดูลย่อยที่./libs/graphและ./libs/network)
สมมติว่าเรากำลังใช้CMakeและแต่ละโครงการเหล่านี้มีการทดสอบหน่วยและงานทั้งหมด แต่ละโครงการ (รวมถึงstudioและplayer) จะต้องสามารถรวบรวมได้แบบสแตนด์อโลนเพื่อดำเนินการวัดรหัสการทดสอบหน่วย ฯลฯ
สิ่งที่เป็นแบบเรียกซ้ำgit submodule fetchแล้วคุณจะได้รับโครงสร้างไดเรกทอรีต่อไปนี้:
studio/
studio/libs/ (sub-module depth: 1)
studio/libs/graph/
studio/libs/graph/libs/ (sub-module depth: 2)
studio/libs/graph/libs/core/
studio/libs/network/
studio/libs/network/libs/ (sub-module depth: 2)
studio/libs/network/libs/core/
ขอให้สังเกตว่าcoreถูกโคลนสองครั้งในstudioโครงการ นอกเหนือจากพื้นที่ดิสก์นี้เสียผมมีปัญหาการสร้างระบบเพราะผมกำลังสร้างcoreสองครั้งและผมอาจจะได้รับสองรุ่นต่าง ๆ coreของ
คำถาม
ฉันจะจัดระเบียบโมดูลย่อยเพื่อให้ได้รับการอ้างอิงเวอร์ชันและบิลด์แบบสแตนด์อโลนโดยไม่ได้รับสำเนาย่อยของโมดูลย่อยทั่วไปหลาย ๆ ชุดได้อย่างไร
ทางออกที่เป็นไปได้
หากการพึ่งพาของไลบรารีเป็นข้อเสนอแนะ (เช่นใน "รู้จักการทำงานกับรุ่น X" หรือ "สนับสนุนเฉพาะรุ่น X" อย่างเป็นทางการ "แฟชั่น) และแอพพลิเคชั่นหรือไลบรารีที่ขึ้นกับศักยภาพมีความรับผิดชอบในการสร้างสิ่งที่พวกเขาต้องการ ฉันจินตนาการถึงสถานการณ์ต่อไปนี้:
- มีระบบการสร้าง
graphและnetworkบอกพวกเขาว่าจะหาได้ที่ไหนcore(เช่นผ่านทางคอมไพเลอร์รวมถึงเส้นทาง) กำหนดสองเป้าหมายการสร้าง "สแตนด์อโลน" และ "การพึ่งพา" โดยที่ "สแตนด์อโลน" ขึ้นอยู่กับ "การพึ่งพา" และเพิ่มพา ธ รวมเพื่อชี้ไปยังcoreโมดูลย่อยท้องถิ่น - แนะนำการพึ่งพาเสริมบน
studiocoreจากนั้นstudioสร้างcoreตั้งค่าเส้นทางรวมให้เป็นสำเนาของcoreโมดูลย่อยจากนั้นสร้างgraphและnetworkในโหมด "การพึ่งพา"
โครงสร้างโฟลเดอร์ที่ได้จะเป็นดังนี้:
studio/
studio/libs/ (sub-module depth: 1)
studio/libs/core/
studio/libs/graph/
studio/libs/graph/libs/ (empty folder, sub-modules not fetched)
studio/libs/network/
studio/libs/network/libs/ (empty folder, sub-modules not fetched)
แต่นี้ต้องบางมายากลสร้างระบบ (ฉันสวยมั่นใจนี้สามารถทำได้ด้วย CMake) และบิตของการทำงานด้วยตนเองในส่วนของการปรับปรุงรุ่น (ปรับปรุงgraphนอกจากนี้ยังอาจจำเป็นต้องมีการปรับปรุงcoreและnetworkจะได้รับรุ่นที่รองรับการcoreในทุกโครงการ) .
ความคิดใด ๆ เกี่ยวกับเรื่องนี้?