ฉันมีปัญหาที่คล้ายกัน แต่ทาสีตัวเองให้เป็นมุมด้วยเครื่องมือ GUI
ฉันมีโครงการย่อยที่มีไฟล์อยู่สองสามไฟล์ที่ฉันเพิ่งคัดลอกไปมาแทนที่จะไปเช็คที่ repo คอมไพล์ของพวกเขาเอง ฉันสร้าง repo ในโฟลเดอร์ย่อยสามารถกระทำพุชและอื่น ๆ ได้ดี แต่ใน repo พาเรนต์โฟลเดอร์ย่อยจะไม่ถือว่าเป็น submodule และไฟล์นั้นยังคงถูกติดตามโดย repo พาเรนต์ - ไม่ดี
เมื่อต้องการออกจากความยุ่งเหยิงนี้ฉันต้องบอก Git ให้หยุดติดตามโฟลเดอร์ย่อย (โดยไม่ลบไฟล์):
proj> git rm -r --cached ./ui/jslib
จากนั้นฉันต้องบอกว่ามี submodule ที่นั่น (ซึ่งคุณไม่สามารถทำได้ถ้ามีอะไรที่กำลังถูกติดตามโดย git):
proj> git submodule add ./ui/jslib
ปรับปรุง
วิธีที่เหมาะในการจัดการเรื่องนี้เกี่ยวข้องกับอีกไม่กี่ขั้นตอน เป็นการดีที่ repo ที่มีอยู่จะถูกย้ายออกไปยังไดเรกทอรีของตัวเองโดยไม่ต้องมีโมดูล git หลักใด ๆ ที่คอมมิตและถูกผลักดัน
proj> git submodule add git@bitbucket.org:user/jslib.git ui/jslib
ที่จะโคลน repo git เป็น submodule - ซึ่งเกี่ยวข้องกับขั้นตอนการโคลนมาตรฐาน แต่ยังมีอีกหลายขั้นตอนการกำหนดค่าปิดบังอื่น ๆ ที่ git ใช้ในนามของคุณเพื่อให้ได้ submodule ที่ทำงาน ความแตกต่างที่สำคัญที่สุดคือมันวางไฟล์. git แบบง่าย ๆ ไว้ที่นั่นแทนที่จะเป็นไดเร็กตอรี่. git ซึ่งมีการอ้างอิงพา ธ ไปยังตำแหน่งที่ git dir ตัวจริงอาศัยอยู่ - โดยทั่วไปอยู่ที่รูทโปรเจ็กต์หลัก
หากคุณไม่ทำสิ่งนี้ด้วยวิธีที่พวกเขาจะทำงานได้ดีสำหรับคุณ แต่ทันทีที่คุณกระทำและผลักพ่อแม่และอีกคนหนึ่งที่จะดึงผู้ปกครองคนนั้นมาคุณก็ทำให้ชีวิตของพวกเขายากขึ้นมาก มันจะยากมากสำหรับพวกเขาที่จะทำซ้ำโครงสร้างที่คุณมีในเครื่องตราบใดที่คุณมี. git dir เต็มในโฟลเดอร์ย่อยของ dir ที่มี. git dir อยู่
ดังนั้นย้ายกด git เพิ่ม submodule เป็นตัวเลือกที่สะอาดที่สุด