git सबमॉड्यूल ट्रैकिंग नवीनतम


136

हम अपनी (विशाल) परियोजना को आगे बढ़ाने के लिए आगे बढ़ रहे हैं और हम सबमॉड्यूल का उपयोग करने के बारे में सोच रहे हैं। हमारी योजना सुपरप्रोजेक्ट में तीन अलग-अलग प्रमुख हैं: रिलीज़, स्थिर, नवीनतम। प्रोजेक्ट लीड रिलीज और स्थिर शाखाओं को संभालेगा। आवश्यकतानुसार वे सबमोड्यूल्स को स्थानांतरित करेंगे।

मुद्दा "नवीनतम" प्रमुख है। हम सभी सबमॉड्यूल (स्वचालित रूप से) की मास्टर शाखाओं को ट्रैक करने के लिए सुपरप्रोजेक्ट "नवीनतम" सिर चाहेंगे। और यह भी बहुत अच्छा होगा अगर यह सबमोडुले में सभी कमिट्स का इतिहास दिखाएगा।

मैंने gitslave को देखा है, लेकिन यह वैसा नहीं है जैसा हम चाहते हैं। कोई सुझाव?


जब आपने एक उपकरण के लिए पूछा था, तो मैं सिर्फ इस सवाल को जोड़ना चाहता हूं जो एक ही काम करने वाले एक-लाइनर्स को इकट्ठा करता है: stackoverflow.com/questions/1030169/…
तोबू

Git अब सबमॉडल्स के साथ नवीनतम ट्रैकिंग की पेशकश करता है: मेरा संपादित उत्तर देखें।
VonC

जवाबों:


235

मार्च 2013 को अपडेट करें

Git 1.8.2 ने शाखाओं को ट्रैक करने की संभावना को जोड़ा।

" git submodule" मैंने दूरस्थ शाखा की नोक के साथ एकीकृत करने के लिए एक नया मोड सीखना शुरू कर दिया है (जैसा कि सुपरप्रोजेक्ट के गीटलिंक में दर्ज की गई प्रतिबद्धता के साथ एकीकृत करने का विरोध किया गया है)।

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 

यदि आपके पास पहले से मौजूद एक सबमॉड्यूल था तो आप अब एक शाखा को ट्रैक करना चाहते हैं, " एक मौजूदा सबमॉड्यूल ट्रैक को एक शाखा कैसे बनाएं " देखें।

सबमोडुल्स पर सामान्य जानकारी के लिए सबमोड्यूल्स पर वोगेला के ट्यूटोरियल को भी देखें ।

ध्यान दें:

git submodule add -b . [URL to Git repo];
                    ^^^

git submoduleमैन पेज देखें :

एक विशेष मूल्य का .उपयोग यह इंगित करने के लिए किया जाता है कि सबमॉड्यूल में शाखा का नाम वर्तमान रिपॉजिटरी में वर्तमान शाखा के समान नाम होना चाहिए


देखें प्रतिबद्ध b928922727d6691a3bdc28160f93f25712c565f6 :

submodule add: यदि --branchदिया गया है, तो उसे रिकॉर्ड करें.gitmodules

यह आपको एक नया सबमॉड्यूल जोड़ने पर आसानी से एक submodule.<name>.branchविकल्प रिकॉर्ड करने की अनुमति देता है .gitmodules। इस पैच के साथ,

$ git submodule add -b <branch> <repository> [<path>]
$ git config -f .gitmodules submodule.<path>.branch <branch>

को कम करता है

$ git submodule add -b <branch> <repository> [<path>]

इसका मतलब है कि भविष्य के लिए कहता है

$ git submodule update --remote ...

आपको उसी शाखा से अपडेट मिलेगा, जिसका उपयोग आपने सबमॉड्यूल को इनिशियलाइज़ करने के लिए किया था, जो आमतौर पर आप चाहते हैं।

साइन-ऑफ-बाय: डब्ल्यू। ट्रेवर किंग


मूल उत्तर (फरवरी 2012):

एक सबमॉडल एक एकल प्रतिबद्ध है जिसे माता-पिता रेपो द्वारा संदर्भित किया जाता है।
चूँकि यह अपने आप में एक Git रेपो है, "सब कमिट्स का इतिहास" git logउस सबमॉडल के भीतर उपलब्ध है।

इसलिए माता-पिता के लिए स्वचालित रूप से एक सबमॉड्यूल की दी गई शाखा की नवीनतम प्रतिबद्धता को ट्रैक करने के लिए, इसकी आवश्यकता होगी:

  • submodule में cd
  • यह सुनिश्चित करने के लिए कि यह सही शाखा पर नवीनतम कमिट है, git लाने / खींचने के लिए
  • जनक रेपो में सीडी वापस
  • जोड़ें और प्रतिबद्ध करने के लिए सबमॉड्यूल की नई कमेटी को रिकॉर्ड करें।

gitslave (कि आप पहले से ही देखा) प्रतिबद्ध संचालन के लिए , सबसे उपयुक्त प्रतीत होता है ।

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

अन्य विकल्प यहां विस्तृत हैं


1
@BraveNewMath आप अपने submodule में सही शाखा चेकआउट करने की आवश्यकता है, तो अपने माता-पिता रेपो के पास जाकर टाइप करें: git config -f .gitmodules submodule.<path>.branch <branch>। सब कुछ जोड़ें, प्रतिबद्ध करें और धक्का दें।
वॉन सीएपी

2
@BraveNewMath मैं एक सबमॉड्यूल बनाने के लिए सभी चरणों को विस्तार से बताती हूं कि stackoverflow.com/a/18799234/6309 में एक शाखा है ।
वॉनसी

1
--remoteटैग का उपयोग करना महत्वपूर्ण है यदि आप अपडेट करते समय अलग किए गए सिर नहीं चाहते हैं, तो सोचें कि ऐसा क्यों लगता है कि आपका ताज़ा खींचा गया कोड मास्टर के पीछे है!
क्रिस वाट्स

3
@ डीडी_ मैं "इस उत्तर" से सहमत हूं (जब से मैंने इसे लिखा है)। "एक शाखा का अनुसरण" सुविधा एक शाखा की नवीनतम समिति के लिए एक उपखंड को अद्यतन करने के लिए है। एक बार ऐसा हो जाने के बाद, आपको अभी भी मूल रेपो में नए सबमॉड्यूल राज्य को जोड़ना और प्रतिबद्ध करना होगा। और अगला क्लोन उस राज्य (हेडलेस) की जाँच करेगा।
वॉन

3
@VonC तो आगे स्पष्ट करने के लिए, "एक शाखा का अनुसरण करना" सुविधा केवल git submodule updateयह बताकर कमांड के व्यवहार को प्रभावित करती है कि कौन सा कमिट (यानी मास्टर पर सबसे हाल का कमिटमेंट) सबमॉडल को अपडेट करने के लिए है, न कि ऑटोमैटिकली पैरेंट रेपो को अपडेट करने का कारण प्रतिबद्ध है जो क्लोन समय पर सबमॉडल द्वारा इंगित किया जाता है?
क्रिश्चियन २६'१
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.