ฉันเป็นแฟนตัวยงของGit ย่อยโมดูล ฉันชอบที่จะสามารถติดตามการพึ่งพาพร้อมกับเวอร์ชันเพื่อให้คุณสามารถย้อนกลับไปเป็นเวอร์ชันก่อนหน้าของโครงการของคุณและมีเวอร์ชันที่สอดคล้องกันของการพึ่งพาเพื่อสร้างอย่างปลอดภัยและเรียบร้อย ยิ่งไปกว่านั้นมันง่ายกว่าที่จะปล่อยไลบรารี่ของเราเป็นโครงการโอเพ่นซอร์สเนื่องจากประวัติของไลบรารี่นั้นแยกจากแอพพลิเคชั่นที่ขึ้นอยู่กับพวกมัน
ฉันกำลังตั้งค่าเวิร์กโฟลว์สำหรับหลายโครงการในที่ทำงานและฉันสงสัยว่ามันจะเป็นอย่างไรถ้าเราใช้วิธีนี้แบบสุดขั้วแทนที่จะมีโครงการเสาหินเดียว ฉันรู้อย่างรวดเร็วมีความสามารถที่มีศักยภาพของเวิร์มในจริงๆโดยใช้โมดูลย่อย
เผื่อว่าคู่ของการใช้งาน: studio
และplayer
และขึ้นอยู่กับห้องสมุดcore
, graph
และnetwork
ที่อ้างอิงมีดังนี้
core
เป็นแบบสแตนด์อโลนgraph
ขึ้นอยู่กับcore
(โมดูลย่อยที่./libs/core
)network
depdends 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
โมดูลย่อยท้องถิ่น - แนะนำการพึ่งพาเสริมบน
studio
core
จากนั้น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
ในทุกโครงการ) .
ความคิดใด ๆ เกี่ยวกับเรื่องนี้?