2008-08-18 2 views
6

वर्तमान में हम का एक मानक तोड़फोड़ भंडार लेआउट के साथ एक परियोजना है:एक बहु-मॉड्यूल परियोजना को अलग भंडार पेड़ों में विभाजित करने के लिए कब चाहिए?

./trunk
./branches
./tags

हालांकि, हम OSGi और एक की सड़क के नीचे जा रहे हैं के रूप में

./trunk/bundle/main
./trunk/bundle/modulea
./trunk/bundle/moduleb ./tags/bundle/main-1.0: मॉड्यूलर परियोजना है, हम साथ समाप्त हो गया है। ./tags/bundle/main-1.0.1
./tags/bundle/modulea-1.0.0

'निर्माण' हालांकि मैं, यह क्रम में सभी मॉड्यूल आधारित है, में काफी अखंड अब भी है

./bundle/main/trunk
./bundle/main/tags/main-1.0.0
./bundle/main: m आश्चर्य अगर हम कुछ और अधिक की तरह करने के लिए निर्माण/भंडार refactor चाहिए शुरू करने /tags/main-1.0.1
./bundle/modulea/trunk
./bundle/modulea/tags/modulea-1.0.0

इस पैटर्न में मैं प्रत्येक मॉड्यूल बिल्डिंग की कल्पना करता हूं, और अपनी बाइनरी को एक भंडार में संग्रहीत करता हूं (मैवेन, आईवी, या सबवर्सन रिपोजिटरी का दूसरा पथ)।

क्या मॉड्यूलर जाने के बाद प्रोजेक्ट लेआउट पर दिशानिर्देश या 'सर्वोत्तम अभ्यास' हैं?

उत्तर

7

सबवर्सन पुस्तक दो इस पर अनुभाग हैं, जबकि अपनी माइलेज अलग-अलग होगा (प्रत्येक स्थिति व्यक्तिगत है), आपकी /bundle/<project>/(trunk|tags|branches) योजना सामान्य है और इच्छा होगी शायद आपके लिए अच्छी तरह से काम करते हैं।

6

यह बहुत निजी पसंद पर निर्भर है, लेकिन मैं बड़ी कई मॉड्यूल से मिलकर परियोजनाओं के लिए निम्नलिखित संरचना उपयुक्त लगता है:

 
branches 
    project-name 
    module1 
     branch-name 
    module2 
     possibly-another-branch-name 
    branch-name-on-a-higher-level-including-both-modules 
     module1 
     module2 
tags 
    ... (same as branches) 
trunk 
    project-name 
    module1 
    module2 

मैं भी अक्सर बड़ी कई परियोजनाओं युक्त खजाने में संरचना का इस्तेमाल किया है, क्योंकि सभी परियोजनाओं को एक ही भंडार में रखते हुए क्रॉस-रेफरेंसिंग प्रोजेक्ट्स और — इतिहास — के साथ कोड साझा करना आसान बनाता है।

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

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

विषय पर एक ब्लॉग प्रविष्टि: "Subversion Repository Layout"

संक्षिप्त उत्तर है, हालांकि:

0

मैंने स्टैक ओवरफ्लो Version Control Structure question में एक समान प्रश्न का उत्तर दिया है। यह वास्तव में यहां बेहतर फिट बैठता है क्योंकि हम भारी ओएसजीआई विकास करते हैं और बहुत सारे बंडल हैं। मुझे एंडर्स सैंडविग टिप्पणियों को गूंजना होगा: रूट स्तर पर ट्रंक/टैग/शाखाएं रखें क्योंकि आप केवल मॉड्यूल के सीमित सेट को ही ब्रांच करेंगे। यह अलग-अलग मॉड्यूल के निर्माण में हस्तक्षेप नहीं करता है।

मैं पहले किए गए उत्तर की प्रतिलिपि नहीं बनाउंगा लेकिन यह इस प्रश्न के लिए पूरी तरह से प्रासंगिक है।

3
बस मेरे दो सेंट

...

मैं सिर्फ SVN प्रलेखन (पहले से ही एक और जवाब में उद्धृत, एक ही धागा) में टिप्पणी जोर देना चाहते http://svnbook.red-bean.com/en/1.4/svn.reposadmin.planning.html#svn.reposadmin.projects.chooselayout

अंश का संदर्भ निम्नलिखित संरचना: / ट्रंक/ calc/ कैलेंडर/ स्प्रेडशीट/ ... टैग/ calc/ कैलेंडर/ स्प्रेडशीट/ ... शाखाओं/ calc/ कैलेंडर/ स्प्रेडशीट/

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

मेरे अपने के लिए, मैं इस बात से काफी दृढ़ता से सहमत हैं और निम्नलिखित लेआउट पसंद करते हैं: / utils/ calc/ ट्रंक/ टैग/ शाखाओं/ कैलेंडर/ ट्रंक/ टैग/ शाखाएं/ ...,210 कार्यालय/ स्प्रेडशीट/ ट्रंक/ टैग/ शाखाओं/

कारण बस हैं कि इसकी एक पूरी परियोजना सेट जब एक ही विशेष समूह के टैग करने के लिए चाहते हो जाएगा टैग करने के लिए अव्यावहारिक।

चलिए एक उदाहरण का उपयोग करते हैं: यदि प्रोजेक्ट -1 मॉड्यूलए v1.1 और मॉड्यूलबी v2.3 पर निर्भर करता है, तो मैं टैग में प्रकट होने के लिए नया मॉड्यूल ए v2.x नहीं चाहता हूं। वास्तव में, जब कुछ टैग/सप्ताह/महीने बाद इस टैग की गई रिलीज में वापस आते हैं, तो मुझे मॉड्यूल ए के संस्करण को पढ़ने के लिए प्रोजेक्ट -1 के टैग किए गए संस्करण में बंडल डिस्क्रिप्टर खोलने के लिए मजबूर होना होगा।

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

यह सिर्फ दो सेंट था।