ขั้นตอนแบบแมนนวลพร้อมคำสั่งคอมไพล์ง่ายๆ
แผนคือการแยกแต่ละไดเรกทอรีออกเป็น repos ของตัวเองจากนั้นรวมเข้าด้วยกัน ขั้นตอนแบบแมนนวลต่อไปนี้ไม่ได้ใช้สคริปต์ที่ใช้งานเกินขนาด แต่เป็นคำสั่งที่เข้าใจง่ายและสามารถช่วยรวมโฟลเดอร์ย่อย N พิเศษลงในที่เก็บเดียวได้
หาร
สมมติว่า repo เดิมของคุณคือoriginal_repo
1 - แยกแอป:
git clone original_repo apps-repo
cd apps-repo
git filter-branch --prune-empty --subdirectory-filter apps master
2 - แยก libs
git clone original_repo libs-repo
cd libs-repo
git filter-branch --prune-empty --subdirectory-filter libs master
ดำเนินการต่อหากคุณมีมากกว่า 2 โฟลเดอร์ ตอนนี้คุณจะมีที่เก็บ git ใหม่และชั่วคราวสองที่
พิชิตโดยการรวมแอพและ libs
3 - เตรียม repo ใหม่ล่าสุด:
mkdir my-desired-repo
cd my-desired-repo
git init
และคุณจะต้องทำการคอมมิตอย่างน้อยหนึ่งครั้ง หากควรข้ามสามบรรทัดต่อไปนี้ repo แรกของคุณจะปรากฏทันทีภายใต้รูท repo ของคุณ:
touch a_file_and_make_a_commit # see user's feedback
git add a_file_and_make_a_commit
git commit -am "at least one commit is needed for it to work"
เมื่อคอมมิตไฟล์ชั่วคราวmerge
คำสั่งในส่วนต่อมาจะหยุดตามที่คาดไว้
จากความคิดเห็นของผู้ใช้แทนที่จะเพิ่มไฟล์แบบสุ่มเช่นa_file_and_make_a_commit
คุณสามารถเลือกที่จะเพิ่ม.gitignore
หรือREADME.md
อื่น ๆ
4 - รวมแอป repo ก่อน:
git remote add apps-repo ../apps-repo
git fetch apps-repo
git merge -s ours --no-commit apps-repo/master # see below note.
git read-tree --prefix=apps -u apps-repo/master
git commit -m "import apps"
ตอนนี้คุณควรเห็นไดเรกทอรีแอพในที่เก็บใหม่ของคุณ git log
ควรแสดงข้อความยืนยันในอดีตที่เกี่ยวข้องทั้งหมด
หมายเหตุ: ดังที่ Chris ระบุไว้ด้านล่างในความคิดเห็นสำหรับ git เวอร์ชันใหม่กว่า (> = 2.9) คุณต้องระบุ--allow-unrelated-histories
ด้วยgit merge
5 - รวม libs repo ถัดไปในลักษณะเดียวกัน:
git remote add libs-repo ../libs-repo
git fetch libs-repo
git merge -s ours --no-commit libs-repo/master # see above note.
git read-tree --prefix=libs -u libs-repo/master
git commit -m "import libs"
ดำเนินการต่อหากคุณมีมากกว่า 2 repos ที่จะรวม
การอ้างอิง: ผสานไดเร็กทอรีย่อยของที่เก็บอื่นด้วย git