मेरे पास एक समान मुद्दा था, लेकिन अपने आप को जीयूआई उपकरणों के साथ एक कोने में चित्रित किया था।
मेरे पास इसमें कुछ फाइलों के साथ एक उपप्रोजेक्ट था जिसे मैंने अभी तक अपने स्वयं के गिट रेपो में जांचने के बजाय चारों ओर कॉपी किया था। मैंने सबफ़ोल्डर में एक रेपो बनाया, बस ठीक करने के लिए प्रतिबद्ध, धक्का, आदि करने में सक्षम था। लेकिन माता-पिता के रेपो में सबफ़ोल्डर को एक सबमॉड्यूल के रूप में नहीं माना जाता था, और इसकी फ़ाइलों को अभी भी माता-पिता रेपो द्वारा ट्रैक किया जा रहा था - अच्छा नहीं।
इस झंझट से बाहर निकलने के लिए मुझे Git को सबफ़ोल्डर को ट्रैक करने से रोकने के लिए (फ़ाइलों को हटाने के बिना) बताना पड़ा :
proj> git rm -r --cached ./ui/jslib
फिर मुझे यह बताना पड़ा कि वहां एक सबमॉडल था (जो आप नहीं कर सकते हैं अगर वर्तमान में गिट द्वारा ट्रैक किया जा रहा है तो कुछ भी नहीं):
proj> git submodule add ./ui/jslib
अपडेट करें
इसे संभालने का आदर्श तरीका कुछ और कदम शामिल हैं। आदर्श रूप से, मौजूदा रेपो को अपनी निर्देशिका में स्थानांतरित कर दिया जाता है, किसी भी माता-पिता के मॉड्यूल से मुक्त, प्रतिबद्ध और धक्का दिया जाता है, और फिर इस तरह एक सबमॉड्यूल के रूप में जोड़ा जाता है:
proj> git submodule add git@bitbucket.org:user/jslib.git ui/jslib
जो कि git repo को एक सबमॉड्यूल के रूप में क्लोन करेगा - जिसमें मानक क्लोनिंग स्टेप्स शामिल हैं, लेकिन कई अन्य अधिक अस्पष्ट कॉन्फिग स्टेप्स भी हैं जो git आपकी तरफ से उस सबमॉड्यूल को काम करने के लिए लेता है। सबसे महत्वपूर्ण अंतर यह है कि यह एक .गित निर्देशिका के बजाय एक साधारण .गित फ़ाइल को रखता है, जिसमें एक पथ संदर्भ होता है, जहां वास्तविक git dir रहता है - आमतौर पर मूल प्रोजेक्ट रूट .गित / मॉड्यूल / jslib।
यदि आप इस तरह से चीजें नहीं करते हैं तो वे आपके लिए ठीक काम करेंगे, लेकिन जैसे ही आप माता-पिता के लिए प्रतिबद्ध होते हैं और धक्का देते हैं, और एक और देव उस माता-पिता को खींचने के लिए जाता है, आपने बस अपने जीवन को बहुत कठिन बना दिया है। आपके लिए आपके मशीन पर आपके द्वारा बनाए गए ढांचे को तब तक दोहराना बहुत मुश्किल होगा जब तक आपके पास एक डायर के सबफ़ोल्डर में एक पूर्ण .गित डायर होता है जिसमें उसका अपना .गित डायर होता है।
तो, चाल, धक्का, गिट सबमॉडल जोड़ें, सबसे साफ विकल्प है।