2009-06-15 7 views
20

क्या कोई असली परियोजनाओं में नई गिट सुपर/सबप्रोजेक्ट सुविधा का उपयोग कर रहा है? यह कितना अच्छा काम करता है? उदाहरण के लिए, मैं समझता हूं कि अगर मैं एक उपप्रोजेक्ट को दबाता हूं तो मुझे सुपरप्रोजेक्ट हुक को मैन्युअल रूप से कॉल करना होगा (शायद सबप्रोजेक्ट हुक का उपयोग करना, लेकिन फिर भी)?क्या कोई वास्तव में गिट सुपर/सबप्रोजेक्ट का उपयोग कर रहा है?

+4

एक सबप्रोजेक्ट एक सबमिशन के समान है? मैंने उनको इस्तेमाल किया है। – Apreche

उत्तर

11

सबमिशन का उपयोग करके, आप अपने गिट वर्कस्पेस (जिसका अर्थ है "सुपर-प्रोजेक्ट" गिट रिपोजिटरी) में कॉन्फ़िगरेशन में परिभाषित कर रहे हैं।
"कॉन्फ़िगरेशन" द्वारा, मेरा मतलब है "आपके वर्कस्पेस में काम करने के लिए आवश्यक टैग या SHA-1 नोड की सूची"।
(और काम से, मेरा मतलब है कि आप अपने कार्यक्षेत्र में जो भी "विकास प्रयास" कर रहे हैं: क्लासिक संकलन, या पैच, या विलय, या तैनाती, या ...)।
मामला है जब अपने एक सुपर परियोजना और "git update" अपने submodules क्लोनिंग कर रहे हैं यही कारण है कि: यदि आपका सटीक रेपोस SHA1 जो पहले सुपर परियोजना (the index में के रूप में gitlink दर्ज की गई) में अंजाम दिया checkouting कर रहे हैं।

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

उस अंतिम परिदृश्य में वास्तविक चाल (जो आपको एक हुक के लायक हो सकती है) वह है जब आप सुपर-प्रोजेक्ट को दबा रहे हैं: आपको पहले अपने सभी उप-मॉड्यूल को धक्का देना सुनिश्चित करना होगा।

submodule tutorial से:

हमेशा superproject यह संदर्भ के लिए परिवर्तन प्रकाशित करने से पहले submodule परिवर्तन को प्रकाशित करें। आप submodule परिवर्तन प्रकाशित करने के लिए भूल जाते हैं, दूसरों (सुपर परियोजना के) भंडार क्लोन करने के लिए सक्षम नहीं होगा

आप can configure a submodule to follow a branch मत भूलना।

+5

यह सबोडोड्यूल के अल्फा संस्करण की तरह लगता है, बहुत सी जटिलताओं ...: एस – inf3rno

3

यदि आप सबमिड्यूल का मतलब है, तो निश्चित रूप से।

submodules हर जगह पता नहीं है और पता नहीं होना चाहिए। उदाहरण के लिए, मेरे पास एक सबमिशन है जिसका उपयोग कई परियोजनाओं में किया जाता है जो मुझे पता है (और संभवतः कई जो मैं नहीं करता)।

एक सबमिशन में धक्का देना किसी भी तरह से प्रसंस्करण वाले प्रोजेक्ट द्वारा उपयोग किए गए कोड के संस्करण को प्रभावित नहीं करता है, इसलिए मुझे यकीन नहीं है कि आप एक हुक को वैसे भी करना चाहते हैं।

+0

उदाहरण के लिए, सबमिशन एक बड़े sw का हिस्सा है, जब कोई पुश करता है तो मैं पूरे पैकेज को संकलित करना चाहता हूं। – Makis

+0

आप दोनों अंक याद कर रहे हैं। 1) सबमिशन बदलने से इसमें कोई भी परियोजना नहीं बदली है। बिलकुल। एक नया निर्माण पिछले निर्माण के समान होगा। 2) एक दिए गए सबमिशन का उपयोग हजारों अनुप्रयोगों द्वारा किया जा सकता है और यह नहीं पता कि वे सभी क्या हैं। – Dustin

+0

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

11

एफडब्ल्यूआईडब्ल्यू, हम गिट को छलांग लगाने की कोशिश कर रहे हैं, और हमारी परियोजना (bitweaver, एक सामग्री प्रबंधन प्रणाली) nearly 160 repositories के साथ एक अत्यधिक मॉड्यूलर सिस्टम है)। एक "निर्माण" में आम तौर पर दो दर्जन या अधिक उप-भंडार होते हैं। हमने सीवीएस में 'वर्चुअल मॉड्यूल' का इस्तेमाल किया, और यह हमारे लिए शानदार रूप से काम करता था, हालांकि सीवीएस की स्टेजिंग के लिए इसकी अपनी सीमाएं हैं।

गिट submodules कुछ गंभीर सीमाएं हैं, और आप निश्चित रूप से mercurial के कार्यान्वयन का मूल्यांकन करना चाहिए क्योंकि यह बाहरी/मॉड्यूलर परियोजनाओं के लिए निश्चित रूप से अधिक अनुकूल और लचीला है (यानी यह अन्य वीसीएस सिस्टम, यहां तक ​​कि एचजीजीआईटी का समर्थन करता है)।

  1. प्रत्येक submodule एक विशेष के लिए कड़ी मेहनत से जुड़ा हुआ है के लिए प्रतिबद्ध है जब आप सुपर respository में "Git submodule जोड़ने":

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

  2. आप रूट से सभी उप-रेपो के को आसानी से प्रतिबद्ध नहीं कर सकते हैं। यह भी बहुत परेशान है, नीचे सुपरगिट देखें।

  3. विभिन्न gotchas जो उत्तेजित हो सकते हैं, विशेष रूप से चीजें जो "चुपचाप परिवर्तनों को ओवरराइट करें"।

supergit

हम एक shell script call supergit कि कष्ट के कुछ संभालती लिखा है। यह क्लोन, सबमिशन इनिट, अपडेट, और चेकआउट मास्टर सब एक में गिर गया है। यह सुपर-रेपो में सभी निर्देशिकाओं के लिए गिट कमांड भी करेगा (प्रकार के थोक गिट प्रसंस्करण)।

एचटीएच, शुभकामनाएं।

+0

+1 यह पेशेवरों और विपक्ष का एक अच्छा अवलोकन है। हार्ड-कोडित काम करने के लिए एफवाईआई, यह उन मामलों में उपयोगी होने की उम्मीद है जहां ज्ञात, अच्छे संस्करण (उदाहरण के लिए उत्पादन टैग) के लिए पनडुब्बियों को शायद ही कभी (या मैन्युअल रूप से अपडेट किया जाता है) - इसलिए यह उस मामले में बहुत अच्छी तरह से काम करता है। – ashes999

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