यदि आपने अपने Mac पर एक Git रिपॉजिटरी क्लोन की है और उसके सबमॉड्यूल फ़ोल्डर खाली हैं, तो टर्मिनल खोलें, रिपॉजिटरी में जाएं, और git submodule update --init --recursive चलाएं। यह प्रोजेक्ट द्वारा रिकॉर्ड किए गए सबमॉड्यूल को इनिशियलाइज़ करता है, पैरेंट रिपॉजिटरी द्वारा निर्दिष्ट कमिट्स को चेक आउट करता है, और नेस्टेड सबमॉड्यूल को भी संभालता है। आपके पास Git इंस्टॉल होना चाहिए और प्रत्येक सबमॉड्यूल की रिमोट रिपॉजिटरी का एक्सेस होना चाहिए।

क्लोन की गई रिपॉजिटरी में इनिशियलाइज़ेशन कमांड चलाएं

टर्मिनल खोलें और git clone द्वारा बनाई गई डायरेक्टरी में जाने के लिए cd का उपयोग करें। यदि डायरेक्टरी के नाम में स्पेस हैं, तो इसे कोट्स में रखें, उदाहरण के लिए:

cd "$HOME/Projects/My Project"
git submodule update --init --recursive

उदाहरण पथ को अपने क्लोन के वास्तविक स्थान से बदलें। आप cd टाइप भी कर सकते हैं, रिपॉजिटरी फ़ोल्डर को Finder से टर्मिनल विंडो में ड्रैग करके उसका पाथ डाल सकते हैं, और Return दबा सकते हैं। Apple टर्मिनल को macOS कमांड-लाइन इंटरफ़ेस के रूप में प्रलेखित करता है और zsh को इसके डिफ़ॉल्ट शेल के रूप में पहचानता है; ऊपर दिए गए कमांड सामान्य शेल सिंटैक्स का उपयोग करते हैं जो zsh में काम करता है। Mac पर टर्मिनल खोलें या बंद करें, Mac पर टर्मिनल में डिफ़ॉल्ट शेल बदलें

Git का आधिकारिक दस्तावेज़ बताता है कि --init उन सबमॉड्यूल को इनिशियलाइज़ करता है जिन्हें इनिशियलाइज़ नहीं किया गया है, जबकि --recursive नेस्टेड सबमॉड्यूल को भी अपडेट करता है। update अनुपलब्ध कमिट्स को फ़ेच करता है और पैरेंट रिपॉजिटरी द्वारा अपेक्षित रिवीज़न को चेक आउट करता है। git-submodule दस्तावेज़

जांचें कि सबमॉड्यूल इनिशियलाइज़ हुए हैं या नहीं

पैरेंट रिपॉजिटरी क्या रिकॉर्ड करती है यह देखने के लिए, चलाएं:

git submodule status --recursive

एक सबमॉड्यूल स्टेटस लाइन सामान्यतः एक कमिट ID और पाथ दिखाती है। शुरुआत में ऋण चिह्न (-) का अर्थ है कि वह सबमॉड्यूल इनिशियलाइज़ नहीं है; धन चिह्न (+) का अर्थ है कि इसका चेक-आउट किया गया कमिट पैरेंट रिपॉजिटरी द्वारा रिकॉर्ड किए गए कमिट से भिन्न है; और U एक कॉन्फ़्लिक्ट का संकेत देता है। रिकर्सिव स्टेटस विकल्प नेस्टेड सबमॉड्यूल की भी रिपोर्ट करता है। git-submodule दस्तावेज़

यदि आउटपुट में ऋण चिह्नों वाले पाथ दिखाई देते हैं, तो रिपॉजिटरी की शीर्ष-स्तरीय (टॉप-लेवल) डायरेक्टरी से इनिशियलाइज़ेशन कमांड फिर से चलाएं। यदि कोई सबमॉड्यूल दिखाई नहीं देता है, तो जांचें कि क्या वर्तमान क्लोन में वास्तव में एक .gitmodules फ़ाइल मौजूद है और क्या आप सही रिपॉजिटरी में हैं। हो सकता है कि किसी रिपॉजिटरी में कोई सबमॉड्यूल न हो, या आपके द्वारा क्लोन किए गए कमिट में कोई रिकॉर्ड न हो।

समझें कि कौन सा रिवीज़न चेक आउट होता है

सबमॉड्यूल स्वयं की एक Git रिपॉजिटरी होता है, और पैरेंट रिपॉजिटरी इसके लिए एक विशिष्ट कमिट रिकॉर्ड करती है। सामान्य update व्यवहार उस रिकॉर्ड किए गए कमिट को चेक आउट करता है, जो आमतौर पर सबमॉड्यूल को एक डिटेच्ड (detached) HEAD पर छोड़ देता है। जब आप पैरेंट प्रोजेक्ट सेट कर रहे होते हैं तो यह अपेक्षित होता है: यह पैरेंट द्वारा चुने गए वर्ज़न को पुन: प्रस्तुत करता है। Git - सबमॉड्यूल, git-submodule दस्तावेज़

इस कारण से, जब आपका लक्ष्य केवल क्लोन को इनिशियलाइज़ करना हो, तो --remote न जोड़ें। वह विकल्प पैरेंट द्वारा रिकॉर्ड किए गए कमिट के बजाय सबमॉड्यूल की रिमोट-ट्रैकिंग ब्रांच का उपयोग करता है, जिससे एक अलग वर्ज़न बन सकता है। यदि आप किसी सबमॉड्यूल के अंदर डेवलपमेंट करने का इरादा रखते हैं, तो पहले प्रोजेक्ट के वर्कफ़्लो को समझें; किसी ब्रांच में स्विच करना या उसके अंदर कमिट करना इसे इनिशियलाइज़ करने से अलग है।

यदि कमांड विफल हो जाती है

सबमॉड्यूल अपडेट्स को प्रोजेक्ट के कॉन्फ़िगरेशन में सूचीबद्ध रिमोट्स से कनेक्ट होना आवश्यक होता है, इसलिए नेटवर्क विफलता या अनुपलब्ध एक्सेस चेकआउट को रोक सकता है। प्राइवेट सबमॉड्यूल के लिए आपको होस्टिंग सर्विस के साथ प्रमाणित (authenticate) करने या रिपॉजिटरी की अनुमति होने की आवश्यकता हो सकती है। यदि Git रिपोर्ट करता है कि वह किसी रिपॉजिटरी को नहीं ढूंढ सकता या किसी होस्ट को रीज़ॉल्व नहीं कर सकता, तो अपने नेटवर्क कनेक्शन और एक्सेस की पुष्टि करें, फिर पुनः प्रयास करें।

यदि किसी प्रोजेक्ट ने हाल ही में सबमॉड्यूल URL बदला है, तो git submodule sync --recursive लोकल URL कॉन्फ़िगरेशन को .gitmodules से सिंक्रोनाइज़ कर सकता है; इसके बाद git submodule update --init --recursive चलाएं। Git उन सबमॉड्यूल के लिए URL कॉन्फ़िगरेशन को अपडेट करने के लिए sync का दस्तावेज़ीकरण करता है जो पहले से इनिशियलाइज़ हैं या नए जोड़े गए हैं। git-submodule दस्तावेज़

यदि आपके पास पहले से ही किसी सबमॉड्यूल के अंदर स्थानीय कार्य (local work) मौजूद है, तो किसी भी अपडेट को फ़ोर्स करने या रिवीज़न बदलने से पहले उसका निरीक्षण करें। मानक इनिशियलाइज़ेशन कमांड स्थानीय परिवर्तनों पर Git को फ़ोर्स-चेक आउट करने के लिए नहीं कहता है; समस्या निवारण के शॉर्टकट के रूप में डायरेक्टरी को हटाने के बजाय उस कार्य को सावधानीपूर्वक हल करें या सुरक्षित रखें।

एक बार जब git submodule status --recursive बिना किसी शुरुआती ऋण चिह्न के अपेक्षित कमिट ID दिखाने लगे, तो रिपॉजिटरी के रिकॉर्ड किए गए सबमॉड्यूल रिवीज़न चेक आउट हो चुके हैं। पैरेंट रिपॉजिटरी से काम करना जारी रखें जब तक कि प्रोजेक्ट के निर्देश किसी सबमॉड्यूल के अंदर अलग से काम करने की मांग न करें।

स्रोत