ฉันสามารถแนะนำวิธีแก้ไขปัญหาอื่น (ทดแทนgit-submodules ) สำหรับปัญหาของคุณ - เครื่องมือgil (ลิงค์ git)
ช่วยให้สามารถอธิบายและจัดการการพึ่งพาที่เก็บคอมไพล์ที่ซับซ้อน
นอกจากนี้ยังให้บริการโซลูชั่นที่จะเป็นปัญหาการพึ่งพา submodules recursive คอมไพล์
พิจารณาว่าคุณมีการพึ่งพาโครงการต่อไปนี้:
ตัวอย่างกราฟการพึ่งพาที่เก็บข้อมูล git
จากนั้นคุณสามารถกำหนด.gitlinks
ไฟล์ที่มีคำอธิบายความสัมพันธ์ที่เก็บ:
# Projects
CppBenchmark CppBenchmark https://github.com/chronoxor/CppBenchmark.git master
CppCommon CppCommon https://github.com/chronoxor/CppCommon.git master
CppLogging CppLogging https://github.com/chronoxor/CppLogging.git master
# Modules
Catch2 modules/Catch2 https://github.com/catchorg/Catch2.git master
cpp-optparse modules/cpp-optparse https://github.com/weisslj/cpp-optparse.git master
fmt modules/fmt https://github.com/fmtlib/fmt.git master
HdrHistogram modules/HdrHistogram https://github.com/HdrHistogram/HdrHistogram_c.git master
zlib modules/zlib https://github.com/madler/zlib.git master
# Scripts
build scripts/build https://github.com/chronoxor/CppBuildScripts.git master
cmake scripts/cmake https://github.com/chronoxor/CppCMakeScripts.git master
แต่ละบรรทัดอธิบายลิงก์ git ในรูปแบบต่อไปนี้:
- ชื่อเฉพาะของที่เก็บ
- เส้นทางสัมพัทธ์ของที่เก็บ (เริ่มจากเส้นทางของไฟล์. gitlinks)
- พื้นที่เก็บข้อมูล Git ซึ่งจะใช้ในคำสั่ง git clone สาขาที่เก็บเพื่อชำระเงิน
- บรรทัดว่างหรือบรรทัดที่ขึ้นต้นด้วย # จะไม่ถูกแยกวิเคราะห์ (ถือว่าเป็นความคิดเห็น)
ในที่สุดคุณต้องอัปเดตที่เก็บตัวอย่างรากของคุณ:
# Clone and link all git links dependencies from .gitlinks file
gil clone
gil link
# The same result with a single command
gil update
ดังนั้นคุณจะต้องโคลนโครงการที่จำเป็นทั้งหมดและเชื่อมโยงโครงการเหล่านั้นด้วยวิธีที่เหมาะสม
หากคุณต้องการยอมรับการเปลี่ยนแปลงทั้งหมดในที่เก็บบางแห่งด้วยการเปลี่ยนแปลงทั้งหมดในที่เก็บลิงก์รองคุณสามารถทำได้ด้วยคำสั่งเดียว:
gil commit -a -m "Some big update"
คำสั่ง pull และ push ทำงานในลักษณะเดียวกัน:
gil pull
gil push
เครื่องมือ Gil (ลิงก์ git) รองรับคำสั่งต่อไปนี้:
usage: gil command arguments
Supported commands:
help - show this help
context - command will show the current git link context of the current directory
clone - clone all repositories that are missed in the current context
link - link all repositories that are missed in the current context
update - clone and link in a single operation
pull - pull all repositories in the current directory
push - push all repositories in the current directory
commit - commit all repositories in the current directory
เพิ่มเติมเกี่ยวกับปัญหาการพึ่งพา submodules recursive คอมไพล์