2010-07-14 9 views
6

मैं निम्न समस्या के लिए एक व्यवहार्य रणनीति खोजने की कोशिश कर रहा हूं।सबवर्जन और निर्भरता

हमारे पास कई वेब परियोजनाएं हैं जो हमारे ढांचे पर निर्भर हैं। सबकुछ हमारे एसवीएन में संग्रहीत होता है और इसकी सभी परियोजनाओं की सभी आवश्यक निर्देशिका संरचना (ट्रंक, टैग, शाखाएं) होती है। उदाहरण में - हमारे पास webprj01 और webprj02 प्रोजेक्ट हैं और हमारे पास फ्रेमवर्क frm01 है। उन सभी में सामान्य एसवीएन परियोजना संरचना है - ट्रंक, टैग, शाखाएं।

webprj01 और webprj01 दोनों frm01 पर निर्भर हैं और वास्तविक जीवन में frm01 webprj01 और webprj02 की उपनिर्देशिका के रूप में मौजूद है। एसवीएन में इसे प्राप्त करने के लिए एसवीएन सेट करना संभव है: बाहरी संपत्ति और हम frpr01 को webprj01 और webprj02 के ट्रंक के अंदर/frm01/trunk पर इंगित करने के लिए सेट कर सकते हैं।

वास्तविक जीवन कोडिंग करने के लिए हमें एक कार्यशील प्रति के रूप में सभी तीन परियोजनाओं की जांच करनी है और अपनी स्वयं की कार्यशील प्रतिलिपि में विशेष कोडबेस में परिवर्तन करना है। Webprj01/frm01 से एसवीएन में परिवर्तन प्रकाशित करने का कोई तरीका नहीं है। परिवर्तन frm01 काम करने की प्रतिलिपि में किया जाना चाहिए और एसवीएन के माध्यम से webprj01/frm01 और webprj02/frm01 काम करने वाली प्रतियों में स्थानांतरित किया जाना चाहिए।

इस समाधान में ब्रांचिंग के दौरान निर्भरताओं के साथ समस्या है। मैं एसवीएन/वेबप्रज 01/ट्रंक से /webprj01/branches/release-1.0.0 तक उत्पादन ब्रांच बना देता हूं। दूसरी परियोजना webprj02 और frm01 पर काम करते समय दो दिनों में मैं एसवीएन के माध्यम से स्थिर चेकआउट नहीं कर पा रहा हूं: शाखा रिलीज-1.0.0 में बाहरी। निर्देशिका frm01 पहले से ही frm01/trunk के नए बदलावों को इंगित करता है।

वर्णित समस्या का एक सरलीकृत संस्करण है। हमारे वास्तविक जीवन स्थितियों में निर्भरता कभी-कभी पांच स्तरों की गहरी होती है। मैं किसी भी समय एसवीएन से स्थिर कोड प्राप्त करने में सक्षम होना चाहता हूं। अलग-अलग शब्दों में। जब मैंने रिलीज-1.0.0 के रूप में webprj01 को ब्रंच किया/टैग किया। मैं सृजन से एक वर्ष में उस विशेष टैग के लिए स्थिर कोड प्राप्त करना चाहता हूं।

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

+0

मुझे यकीन है कि एसवीएन से एक वितरित संस्करण नियंत्रण प्रणाली में स्विच करके आपके मुद्दों को हल किया जा सकता है - जो शाखा को बहुत आसान बनाना चाहिए, खासकर जब आपको उत्पादन शाखा की आवश्यकता होती है जहां केवल बग फिक्सिंग परिवर्तन एकत्र किए जाने चाहिए। लेकिन मेरे पास पर्याप्त अनुभव नहीं है कि आपको एक पूर्ण उदाहरण लिखने के लिए पर्याप्त अनुभव न हो, इससे आपकी मदद कैसे होगी। शायद आप जोएल के ट्यूटोरियल को एक मौका देंगे (http://hginit.com/) और इसे अपने आप से बाहर कर दें? –

+0

धन्यवाद। मैं इस तरह की चीज से थोड़ा डर रहा हूं - गिट, मर्कुरियल .... लेकिन मैं पहले से ही इसमें देख रहा हूं। – user390133

+0

हाय स्टीफन। हम अपने विकास में बाहरी का उपयोग करते हैं। मैं उत्सुक हूं कि आप क्यों नहीं कर सकते ... "webprj01/frm01 से एसवीएन में परिवर्तन प्रकाशित करें ..." मैं लगातार बाहरी रूप से चेक आउट प्रोजेक्ट में कोड संशोधित कर रहा हूं और इसे जगह में कर रहा हूं। हालांकि, इस बारे में जागरूक होने की एक बात है, और मुझे अभी भी यह याद आती है, यह है कि आप webprj01 की पूरी कामकाजी प्रतिलिपि नहीं कर सकते हैं और साथ ही frm01 भी प्रतिबद्ध कर सकते हैं। आपको webprj01/frm01 पर नेविगेट करने और एक और प्रतिबद्धता करने की आवश्यकता होगी। लेकिन फिर भी, frm01 में काम करने से काम करना, काम करना, फिर webprj01 पर कूदना और एकीकृत करने के लिए एक अद्यतन करना। धन्यवाद, –

उत्तर

6

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

किसी भी "रूपरेखा" परियोजना अपने आप निर्देशिका संरचना (ट्रंक, टैग, शाखाओं) की तरह आप पहले से ही है लगता है में रहता है:

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

कोई भी परियोजना जिसे "फ्रेमवर्क" प्रोजेक्ट का उपयोग करने की आवश्यकता है, फ्रेमवर्क प्रोजेक्ट के एक विशिष्ट संस्करण की ओर निर्भरता रखेगी - मेवेन तब परियोजना को बनाए जाने पर स्वचालित रूप से नेक्सस सर्वर से इस संस्करण को खींचती है।

यह हमें प्रत्येक प्रोजेक्ट और फ्रेमवर्क घटक को अलग से रिलीज़ करने में सक्षम बनाता है, लेकिन फिर भी उनके बीच निर्भरताओं का ट्रैक रखता है। हम अलग-अलग परियोजनाओं द्वारा पूरी तरह से निर्भरताओं का ट्रैक खोए बिना ढांचे के घटकों के कई संस्करण भी प्राप्त कर सकते हैं।

अभी तक यह हमारे लिए बहुत अच्छी तरह से काम किया है - मैं केवल दो कमियां देख सकते हैं:

यह कुछ समय लगता है स्थापित करने के लिए, खासकर यदि आप Maven से पहले उपयोग नहीं किया है।

प्रत्येक प्रोजेक्ट को रिलीज़ करते समय कुछ ओवरहेड होता है, क्योंकि आप अन्य घटकों के "ट्रंक" संस्करण (यानी "स्वेपशॉट" संस्करण में मैवेन टर्मिनोलॉजी में निर्भरता) की निर्भरता से बचने के लिए प्रत्येक आश्रित घटक को भी जारी करना चाहते हैं।

2

एरिक सही है, एक निर्भरता प्रबंधक आपकी मदद करेगा - मेवेन या चींटी/ivy में देखना चाह सकता है।

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

अतीत मैं js लिया है, सीएसएस में .tgz फ़ाइलों के रूप में पैक और सरल चींटी स्क्रिप्ट द्वारा एक आइवी लता रेपो को प्रकाशित कई परियोजनाओं को & XSL आम, तो परियोजनाओं चींटी बनाता है (और फ़ाइलों ivy.xml) कि निर्भरताओं को हल करें और फिर पूरी चीज को पैकेज करें। यह काम करता है लेकिन

  • फ्रंट एंड वेब लोग स्रोत नियंत्रण, बहुत कम निर्भरता प्रबंधन के साथ संघर्ष कर रहे थे। स्थानीय रिपोजिटरी में एक सामान्य मॉड्यूल में परिवर्तन प्रकाशित करने के लिए उन्हें 'इसे प्राप्त करने' के लिए वास्तव में कठिन था और फिर एक परियोजना का निर्माण करना जो उनके परिवर्तनों पर निर्भर था।

  • अतिरिक्त कदम एरिक ने उल्लेख किया है कि प्रोड के लिए कुछ तैयार करने के लिए कई कलाकृतियों को जारी करना है।

  • क्रूडी विरासत डिजाइन का मतलब है कि वास्तव में सामान्य कोड में, अधिकांश तैनाती के 10 रिलीज में से 1 में वास्तव में इसके कोड में परिवर्तन था ... यह आमतौर पर सामान्य कोड में शामिल था।

गंभीरता से - svn: एक निर्भरता प्रबंधन के रूप में बाहरी सिरदर्द होने वाला है। यह निवेश के लायक है। यह कहकर कि इन लोगों को निर्भरता प्रबंधन में परेशानी थी, वे संभवतया कम संभावनाएं करेंगे ताकि एसवीएन: अब कई शाखाओं पर बाहरी हो।

अगर मुझे फिर से यह सामान करना पड़ा - मैं मैवेन जाऊंगा।

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