यह GitPro पेज अच्छी तरह से git सबमॉड्यूल अपडेट के परिणाम को संक्षेप में प्रस्तुत करता है
जब आप चलते हैं git submodule update
, तो यह परियोजना के विशिष्ट संस्करण की जांच करता है, लेकिन एक शाखा के भीतर नहीं। इसे एक अलग सिर कहा जाता है - इसका मतलब है कि हेड फाइल सीधे एक कमिटमेंट के लिए है, न कि एक प्रतीकात्मक संदर्भ के लिए।
मुद्दा यह है कि आप आमतौर पर एक अलग वातावरण में काम नहीं करना चाहते हैं, क्योंकि परिवर्तनों को खोना आसान है ।
यदि आप एक प्रारंभिक सबमॉड्यूल अपडेट करते हैं, तो काम करने के लिए एक शाखा बनाए बिना उस सबमॉड्यूल निर्देशिका में प्रतिबद्ध करें, और फिर बीच में कमिट किए बिना सुपरप्रोजेक्ट से फिर से git सबमॉड्यूल अपडेट चलाएं, Git आपको बिना बताए आपके परिवर्तनों को अधिलेखित कर देगा। तकनीकी रूप से आप काम नहीं खोएंगे, लेकिन आपके पास इसकी ओर इशारा करने वाली शाखा नहीं होगी, इसलिए इसे पुनर्प्राप्त करना थोड़ा मुश्किल होगा।
नोट मार्च 2013:
जैसा कि " गिट सबमॉड्यूल ट्रैकिंग लेटेस्ट " में बताया गया है, एक सबमॉडल अब (git1.8.2) एक शाखा को ट्रैक कर सकता है।
# add submodule to track master branch
git submodule add -b master [URL to Git repo];
# update your submodule
git submodule update --remote
# or (with rebase)
git submodule update --rebase --remote
" git submodule update --remote
बनामgit pull
" देखें ।
माइंडटूथ का उत्तर एक मैनुअल अपडेट (स्थानीय कॉन्फ़िगरेशन के बिना) को चित्रित करता है:
git submodule -q foreach git pull -q origin master
दोनों ही मामलों में, जो सबमोड्यूल्स संदर्भों ( गीटलिंक , पेरेंट रेपो इंडेक्स में एक विशेष प्रविष्टि ) को बदल देगा, और आपको मुख्य रेपो से उक्त संदर्भों को जोड़ना, कमिट करना और पुश करना होगा।
अगली बार जब आप उस मूल रेपो का क्लोन बनाएंगे, तो यह उन नए SHA1 संदर्भों को दर्शाने के लिए सबमॉड्यूल्स को आबाद करेगा।
इस उत्तर के बाकी हिस्सों में क्लासिक सबमॉडल फीचर (एक निश्चित प्रतिबद्ध के संदर्भ , जो एक सबमॉड्यूल की धारणा के पीछे सभी बिंदु है) का विवरण देता है।
इस समस्या से बचने के लिए, जब आप सबमॉड्यूल डायरेक्टरी में काम करते हैं तो git checkout -b वर्क या कुछ समकक्ष के साथ एक ब्रांच बनाएं। जब आप दूसरी बार सबमॉड्यूल अपडेट करते हैं, तब भी यह आपके काम को वापस कर देगा, लेकिन कम से कम आपके पास वापस जाने के लिए एक पॉइंटर है।
उन में सबमॉड्यूल के साथ शाखाओं को बदलना भी मुश्किल हो सकता है। यदि आप एक नई शाखा बनाते हैं, तो वहां एक सबमॉड्यूल जोड़ें, और फिर उस सबमॉड्यूल के बिना एक शाखा में वापस जाएं, फिर भी आपके पास एक अनट्रेड निर्देशिका के रूप में सबमॉड्यूल निर्देशिका है:
तो, आपके सवालों के जवाब देने के लिए:
क्या मैं शाखाओं / संशोधनों को बना सकता हूं और नियमित रिपॉजिट में जैसे मैं करूंगा, वैसे ही पुश / पुल का उपयोग कर सकता हूं या क्या इस बारे में सतर्क रहना चाहिए?
आप एक शाखा बना सकते हैं और संशोधनों को आगे बढ़ा सकते हैं।
चेतावनी ( Git Submodule ट्यूटोरियल से ): हमेशा प्रकाशित करें (पुश) प्रकाशन से पहले सबमॉड्यूल परिवर्तन (पुश) सुपरप्रोजेक्ट के लिए परिवर्तन जो इसे संदर्भित करता है। यदि आप सबमॉड्यूल परिवर्तन प्रकाशित करना भूल जाते हैं, तो अन्य लोग रिपॉजिटरी का क्लोन नहीं बना पाएंगे।
मैं 1.0 से 1.1 (भले ही मूल रेपो के प्रमुख पहले से ही 2.0 पर है) (कहे जाने वाले) टैग से उप-संदर्भित संदर्भ को आगे कैसे बढ़ाऊंगा
" अंडरमॉडल्स को समझना " पेज मदद कर सकता है
गिट सबमॉडल्स को दो चलती भागों का उपयोग करके कार्यान्वित किया जाता है:
.gitmodules
फ़ाइल और
- एक विशेष प्रकार की वृक्ष वस्तु।
ये एक साथ एक विशिष्ट रिपॉजिटरी के एक विशिष्ट संशोधन को त्रिकोणित करते हैं जिसे आपकी परियोजना में एक विशिष्ट स्थान पर चेक आउट किया जाता है।
से Git submodule पेज
आप मुख्य परियोजना के भीतर से सबमॉड्यूल की सामग्री को संशोधित नहीं कर सकते
100% सही: आप एक सबमॉड्यूल को संशोधित नहीं कर सकते हैं, केवल इसके एक कमिट को देखें।
यही कारण है, जब आप मुख्य परियोजना के भीतर से एक सबमॉड्यूल को संशोधित करते हैं, तो आप:
- सबमॉड्यूल (अपस्ट्रीम मॉड्यूल के लिए) के भीतर प्रतिबद्ध और पुश करने की आवश्यकता है , और
- फिर अपने मुख्य प्रोजेक्ट में ऊपर जाएं, और नए सबमॉडल को संदर्भित करने के लिए उस मुख्य प्रोजेक्ट के लिए फिर से कमिट करें (आपके द्वारा अभी बनाया गया और धकेल दिया गया)
एक सबमॉड्यूल आपको एक घटक-आधारित दृष्टिकोण विकास करने में सक्षम बनाता है , जहां मुख्य परियोजना केवल अन्य घटकों (यहां "अन्य गिट रिपॉजिटरी को उप-मॉड्यूल के रूप में घोषित किया जाता है) के विशिष्ट आवागमन को संदर्भित करता है।"
एक सबमॉडल एक अन्य Git रिपॉजिटरी के लिए एक मार्कर (कमिट) है जो मुख्य परियोजना विकास चक्र से बाध्य नहीं है: यह ("अन्य" Git रेपो) स्वतंत्र रूप से विकसित हो सकता है।
यह मुख्य परियोजना पर निर्भर है कि जो भी इसके लिए आवश्यक है, वह अन्य रेपो से चुन सकता है।
हालांकि, अगर आप चाहते हैं, चाहिए सुविधा से बाहर , अपने मुख्य परियोजना से सीधे उन submodules में से एक, संशोधित करने, Git बशर्ते आप, आप ऐसा करने की अनुमति देता पहले अपने मूल Git रेपो करने के लिए उन submodule संशोधनों प्रकाशित करें, और उसके बाद अपने मुख्य परियोजना की चर्चा करते हुए प्रतिबद्ध एक नए कहा submodule के संस्करण।
लेकिन मुख्य विचार बना हुआ है: विशिष्ट घटकों को संदर्भित करना जो:
- उनका अपना जीवनचक्र है
- टैग का अपना सेट है
- उनका अपना विकास है
आपके मुख्य प्रोजेक्ट में आपके द्वारा निर्दिष्ट विशिष्ट कमिट्स की सूची आपके कॉन्फ़िगरेशन को परिभाषित करती है (यह कॉन्फ़िगरेशन प्रबंधन के बारे में है, जो मात्र संस्करण नियंत्रण प्रणाली को संलग्न करता है। )
यदि कोई घटक वास्तव में आपकी मुख्य परियोजना के रूप में उसी समय विकसित किया जा सकता है (क्योंकि मुख्य परियोजना में कोई भी संशोधन उप-निर्देशिका और इसके विपरीत को संशोधित करना शामिल होगा), तो यह एक "सबमॉड्यूल" होगा, लेकिन कोई और नहीं सबट्री मर्ज (यह भी प्रश्न में प्रस्तुत किया गया था कि सीवीएस से वितरित रिपॉजिटरी के लिए विरासत कोड आधार को स्थानांतरित करना ), दोनों गिट रेपो के इतिहास को एक साथ जोड़ते हैं।
क्या यह Git Submodules के वास्तविक स्वरूप को समझने में मदद करता है?