2011-01-15 14 views
7

पर गिट सबमिड्यूल मैं गिट सबमिड्यूल के लिए नया हूं, और मुझे लगता है कि वे हमेशा विशिष्ट प्रतिबद्धताओं का उल्लेख करते हैं।मास्टर

क्या सुपरप्रोजेक्ट के सबमिड्यूल के लिए मास्टर शाखा के प्रमुख को हमेशा संदर्भित करने का कोई तरीका है, इसलिए सुपरप्रोजेक्ट में "गिट सबमिशन अपडेट" या "गिट पुल" बस सभी सबोड्यूल पर "गिट पुल" करता है।

धन्यवाद।

+0

http://gitref.org/ गिट संदर्भ पृष्ठ शुरू करने का एक अच्छा तरीका है यदि आप गिट के लिए नए हैं। –

+1

@ साहेर: यह एक बहुत ही विशिष्ट सवाल है, न सिर्फ एक सामान्य "मैं गिट करने के लिए नया हूं"। – Cascabel

+0

मुझे लगता है कि जवाब नहीं है। जब यह सबमिशन की जानकारी रिकॉर्ड करता है तो गिट प्रतिबद्धता नाम संग्रहीत करता है, और मेरे मामले में मैंने स्क्रिप्ट्स का एक सेट लिखा है, खींचने, जोड़ने, प्रतिबद्ध करने और धक्का देने के लिए जो मैं इसे सबोडोड्यूल के साथ करना चाहता हूं। – sinelaw

उत्तर

11

संक्षिप्त उत्तर नहीं है। विचार यह है कि आप निश्चित रूप से जानते हैं कि सबमिशन की एक विशिष्ट प्रतिबद्धता आपके प्रोजेक्ट के साथ काम करेगी, और आप नहीं चाहते कि कोई अपरिभाषित या अप्रत्याशित व्यवहार ऑन-द-फ्लाई अपडेट प्राप्त कर रहा हो। एक सबमिशन सीधे दो चीजों द्वारा दर्शाया जाता है: .gitmodules में एक प्रविष्टि, और एक गिटलिंक, जो सबमिशन की वांछित प्रतिबद्धता के SHA1 का संदर्भ है। SHA1, refname नहीं।

आप जो पूछ रहे हैं वह सुपरप्रोजेक्ट के लिए कोई विचार नहीं है सबमिशन में क्या है। इसके बारे में सोचें: आपकी परियोजना के विभिन्न क्लोन अलग-अलग समय पर सबमिशन को अपडेट कर सकते थे, और इसके विभिन्न संस्करणों के साथ समाप्त हो सकते थे, और फिर यदि आपके प्रोजेक्ट में काम किया जाता है, तो उन्हें सबमिशन में अलग-अलग काम करना होगा। जब आप विलय करते हैं, तो आपको बस उन दोनों को अनदेखा करना होगा जो वे कहते हैं और फिर खींचते हैं। उपरोक्त यह है कि आपका अनुरोध submodules के पूरे विचार से परहेज कर रहा है: यह जानने के लिए कि आपके पास क्या है। यदि आप कहते हैं कि आप "मास्टर" का उपयोग कर रहे हैं, तो आप अब से दो महीने वापस आ जाएंगे और इसका कोई मतलब नहीं है कि इसका क्या अर्थ है!

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

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

+0

हमेशा के रूप में, उचित रूप से डाल दिया। +1 – VonC

+0

धन्यवाद बहुत स्पष्ट - स्क्रिप्टिंग कौशल प्राप्त करने का समय .. – Sam

+1

@ जेफ्रोमी: शायद आप अपने जवाब को अपडेट कर सकते हैं क्योंकि अब यह गिट में संभव है? वोनसी का जवाब देखें। – Onur

10

अद्यतन 2013 Git 1.8.2 के बाद से, एक submodule एक शाखा पालन कर सकते हैं (और न सिर्फ एक निश्चित प्रतिबद्ध संदर्भ)

देखें "git submodule tracking latest"।


(मूल जवाब जनवरी 2011)

differences between git submodules and (for instance) svn:externals में से एक है यही कारण है कि।

एक सबमिशन एक अलग जीवन चक्र के साथ फाइलों का एक सेट माना जाता है, जिसमें से आप अपनी परियोजना (माता-पिता रेपो) पर काम करने के लिए एक विशिष्ट प्रतिबद्धता का चयन करते हैं।
यदि वह सबमिशन नई प्रतिबद्धता प्रकाशित करता है, तो आपको सबकुछ बाधित करने की आवश्यकता नहीं है, क्योंकि अचानक प्रोजेक्ट के नवीनतम विकास के कारण आपकी परियोजना अब संकलित नहीं होती है।

यदि दूसरी तरफ, फाइलों के दो सेट इतनी बारीकी से संबंधित हैं कि एक में कुछ भी संशोधित करना दूसरे को अद्यतन करना है, तो उन्हें वास्तव में * एक रेपो का हिस्सा होना चाहिए।

संबंधित मुद्दे