2010-12-30 17 views
7

सबसे पहले मैं आपको बताना चाहता हूं कि मेरे पास किस प्रकार की प्रणाली है और मैं इसे बनाना चाहता हूं।विभिन्न एसवीएन भंडारों के साथ विभिन्न परियोजनाओं में कोड प्रबंधन

1- A Solution (has) 
    a- Shared Class Library project (which is for lots of different solutions) 
    b- Another Class Library project (which is only for this solution) 
    c- Web Application project (which main part of this solution) 
    d- Shared Web Service project (which also serves for different solutions) 

2- B Solution (has) 
    a- Shared Class Library project (which is for lots of different solutions) 
    c- Windows Form Application project (which is main part of this solution) 
    d- Web Service project (which also serves for different solutions) 

और ऐसे ही अन्य परियोजनाओं ....

मैं अपने SVN भंडार सर्वर के रूप में xp-dev.com उपयोग कर रहा हूँ। और मैंने इन वस्तुओं के लिए विभिन्न परियोजनाएं खोलीं (साझा कक्षा पुस्तकालय, वेब सेवा प्रोजेक्ट, विंडोज फॉर्म एप्लिकेशन प्रोजेक्ट, वेब एप्लिकेशन प्रोजेक्ट, एक और क्लास लाइब्रेरी प्रोजेक्ट)।

मैं निश्चित रूप से इन सभी परियोजनाओं के संस्करण को करना चाहता हूं।

मेरा पहला प्रश्न है, क्या मुझे प्रत्येक संशोधन (एक समाधान) को एक एसवीएन भंडार में बाद में अपना संशोधन संख्या प्राप्त करने के लिए रखना चाहिए?

या क्या मुझे उनमें से प्रत्येक को अलग-अलग svn भंडार में रखना चाहिए और प्रत्येक समाधान को प्रकाशित/तैनात करने के लिए उपयोग किए जाने वाले उनके सही संस्करण संख्या को (लिखना) रखना चाहिए? alt text

यदि मैं प्रत्येक प्रोजेक्ट (साझा कक्षा लिब, वेब ऐप, साझा वेब सेवा ....) के लिए एक एसवीएन का उपयोग करता हूं तो मैं वास्तविक समाधान के भीतर वीएस.2010 पर सही svn पता और संस्करण कैसे जोड़ सकता हूं? alt text

तो, आप अपने भंडार और परियोजनाओं का प्रबंधन कैसे करते हैं?

उत्तर

3

एक और दृष्टिकोण जो आप ले सकते हैं, सबवर्सन externals प्रॉपर्टी का उपयोग कर अपने कोड को प्रबंधित करने में सक्षम होने के लिए अलग-अलग भंडारों में या एक ही भंडार में उपयोग करने में सक्षम है। लाभ यह है कि जब आप अपने समाधान में साझा कोड की एक नई रिलीज की आवश्यकता होती है तो आप केवल यूआरएल को प्रश्न में अपडेट कर सकते हैं।

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

मान लें कि आपके पास एक बड़ी भंडार है जिसमें आपकी सभी संबंधित परियोजनाएं हैं। यदि आपको लगता है कि यह आवश्यक स्केलेबल नहीं है, तो मैं Apache projects SVN setup पर एक नज़र डालने का सुझाव दूंगा; उनके पास एक ही भंडार में सभी परियोजनाएं हैं। ASF से एक पृष्ठ पर ले रहा है, इस प्रकार के भंडार संरचना बाहर प्रारंभ करते हैं:

/SolutionA/trunk 
/SolutionA/tags 
/SolutionA/branches 

/SolutionB/trunk 
/SolutionB/tags 
/SolutionB/branches 

/SharedClassLib/trunk 
/SharedClassLib/tags 
/SharedClassLib/branches 

/SharedWebService/trunk 
/SharedWebService/tags 
/SharedWebService/branches 

अभी तक यह सिर्फ एक मानक SVN लेआउट है; प्रत्येक कम या कम स्वतंत्र इकाई के पास खेलने के लिए भंडार का अपना क्षेत्र होता है। अब, मान लीजिए कि आप SharedClassLib पर विकास कर रहे हैं और आप संस्करण 2.0.0 तक हैं, और साझा वेब सेवा पर आप संस्करण 1.2.5 पर हैं।

/SharedClassLib/tags/1.0.0 
/SharedClassLib/tags/1.5.0 
/SharedClassLib/tags/2.0.0 

/SharedWebService/tags/1.0.0 
/SharedWebService/tags/1.2.0 
/SharedWebService/tags/1.2.5 

अन्य टैग सिर्फ तथ्य यह है कि अपने विकास के समय के साथ पर अग्रसर कर दिया गया है की व्याख्या के लिए हैं और आपके पास कई विज्ञप्ति लिया है: निर्देशिका लेआउट कुछ ऐसी दिखाई देगी।

अब, SolutionA में वापस आ गया है, तो आप एक LocalClassLibrary परियोजना और एक LocalWebApp परियोजना है।इन परियोजनाओं का सख्ती से इस समाधान का हिस्सा इस समाधान के बाहर साझा नहीं किया गया है।

तो, हमारी समस्या है, हम कैसे SharedClassLib और SharedWebService हमारे SolutionA में मिलता है: एक निर्देशिका लेआउट पर एक चाकू ले रहा है, अपने ट्रंक की तरह कुछ लग सकता है? सबवर्जन बाहरी का उपयोग करके। externals वेब पेज पहले पढ़ें, फिर यहां वापस आएं।

अपनी ज़िंदगी को थोड़ा आसान बनाने के लिए, मैं आपके समाधान निर्देशिका में svn.externals फ़ाइल बनाने का सुझाव देता हूं ताकि svn: externals property को सेट किया जा सके यदि आप कमांड लाइन से ऐसा कर रहे हैं। यदि आप किसी अन्य टूल का उपयोग कर रहे हैं, तो बस ध्यान रखें कि इस मामले में, आपको कई लाइनें जोड़ने की आवश्यकता होगी।

SharedClassLib   http://your.svn.server/SharedClassLib/tags/2.0.0 
SharedWebService  http://your.svn.server/SharedWebService/tags/1.2.5 

संपादित करें 1: फ़ाइल की तरह दिखाई देगा इस बिंदु पर, आप देख सकते हैं कि यूआरएल आप बात कर रहे हैं पूरी तरह से योग्य हैं। इसका मतलब है कि वे अलग-अलग भंडार हो सकते हैं, और आपको यहां वर्णित लेआउट का उपयोग करने की आवश्यकता नहीं है। इसके अतिरिक्त, यदि आप अपने विकास में मध्यवर्ती चरण में हैं और आपको अपने साझा कोड के नवीनतम, खून बहने वाले किनारे, विकास संस्करण की आवश्यकता है, तो http://your.svn.server/SharedClassLib/trunk जैसे यूआरएल का उपयोग करें। कुछ बिंदु पर, हालांकि, आप अपने समाधान को टैग करने और रिलीज़ करने से पहले बाहरी कोड के एकबल संस्करण पर बसना चाहते हैं।

संपादित करें 2: ध्यान दें कि यह प्री-1.5 एसवीएन वाक्यविन्यास है। यह 1.5

में अपनी स्थिति निर्देशिका में svn propset svn:externals -F svn.externals . करें, तो svn commit && svn update में थोड़ा सा बदल गया है। इस बिंदु पर svn आपकी कार्यशील प्रति को उन यूआरएल की सामग्री के साथ पॉप्युलेट करेगा। आपका काम कर प्रति कुछ ऐसा दिखाई देगा: उचित रूप से बाहरी संपत्ति:

./SolutionA/svn.externals 
./SolutionA/<some_solution_level_files> 
./SolutionA/LocalClassLibrary/<some_project_level_files> 
./SolutionA/LocalWebApp/<some_project_level_files> 
./SolutionA/SharedClassLibrary/<some_project_level_files> 
./SolutionA/SharedWebApp/<some_project_level_files> 

जब आप साझा परियोजनाओं के नए संस्करण में, लाने SVN अपडेट करना होगा। कृपया ध्यान दें, इस दृष्टिकोण के लिए कुछ चेतावनी हैं, और एसवीएन बाहरी दस्तावेज में विस्तृत हैं। मुख्य रूप से, ./olution_/SharedClassLibrary में परिवर्तन करने में सक्षम होने की योजना न बनाएं और जब आप समाधान ए में प्रतिबद्ध करते हैं तो परिवर्तनों को जादुई रूप से उठाया जाना चाहिए।

अब आप दुनिया में समाधान ए रिलीज़ करने के लिए तैयार हैं। बस उपयुक्त टैग ट्रंक की (SVN प्रतिलिपि) टैग निर्देशिका बनाएं:

/SolutionA/tags/1.0.0 

अब आप अपने SolutionA यह सही टैग/संस्करण में अपने कोड है होगा, और आप साझा परियोजनाओं का सही संस्करण का उपयोग कर रहे उस रिलीज के लिए।

जाहिर है, वही चर्चा SolutionB पर लागू होती है।

मैंने थोड़ी देर में एसवीएन के साथ काम नहीं किया है, इसलिए माफी माँगती है अगर मुझे ऊपर से कोई भी गलत गलती मिल गई है।

6

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

/शाखाओं
/टैग
/ट्रंक

अपने सभी काम कर समाधान वर्णित फ़ोल्डरों के साथ

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

जब आप रिलीज़ संस्करण के लिए तैयार होते हैं, तो आप उस रिलीज या बिल्ड संस्करण के साथ अपने ट्रंक या अपने ट्रंक का हिस्सा "टैग" कर सकते हैं, "शाखा/टैग" पर/टैग/का उपयोग करके, यह आपको अवसर प्रदान करता है टैग की गई प्रतिलिपि में अपने रिलीज नोट्स को रिकॉर्ड करने के लिए।

एसवीएन में ब्रांचिंग और टैगिंग के बारे में अधिक जानकारी के लिए (Tortoise मानते हुए) TortiseSVN दस्तावेज़ों में Branching/Tagging देखें।

इन शर्तों पर अधिक जानकारी के लिए, see this question स्टैक ओवरव्लो में।

मुझे आशा है कि यह सहायक होगा। मुझे नहीं पता कि सीमाएं क्या हैं, आपको अपने एसवीएन होस्ट से सामना करना पड़ सकता है। ये सुझाव मेरे अपने VisualSVN Server भंडार की मेजबानी में मेरे प्रयोग पर आधारित हैं।

मैं सोर्ससेफ से एसवीएन में आया, और मुझे इस मानक में मूल्य देखने और इन प्रथाओं का उपयोग शुरू करने में कुछ समय लगा। वे अब मेरे लिए अमूल्य हैं।

+0

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

+0

दरअसल, यह एक मुद्दा है यदि निर्भर परियोजनाएं एक और भंडार में हैं। क्या इन परियोजनाओं को एक ही रेपो में आप उन्हें एक साथ टैग कर सकते थे। मेरा उत्तर इस सिफारिश पर आधारित है कि आपकी सभी संबंधित परियोजनाएं एक ही भंडार के भीतर होंगी। यदि यह संभव नहीं है, तो ऐसा करने का एक स्वीकार्य तरीका हो सकता है, जैसे svn: extern (देखें: http://svnbook.red-bean.com/en/1.0/ch07s03 का उपयोग करना।एचटीएमएल) लेकिन हालांकि मैं इसके साथ सीधे अनुभव नहीं कर रहा हूं, यह मेरी धारणा है कि यह ऐसा कुछ है जिसे केवल आवश्यकता के अनुसार उपयोग किया जाना चाहिए। – Derrick

1

मेरी सलाह उसी जीवनसाथी के साथ परियोजना में एक ही भंडार में डालना होगा।

चलो अपना परिदृश्य लें। हम:

  1. साझा कक्षा लाइब्रेरी परियोजना (जो विभिन्न समाधान के बहुत सारे के लिए है)
  2. एक और कक्षा लाइब्रेरी परियोजना (जो इस समाधान के लिए ही है)
  3. वेब अनुप्रयोग परियोजना (इस समाधान का जो मुख्य हिस्सा)
  4. साझा वेब सेवा परियोजना (जो भी अलग समाधान के लिए कार्य करता है)

कि जो एक ही सोल की विभिन्न परियोजनाओं कर रहे हैं 2 & 3 के लिए एक भंडार बना देंगे संविधान (इसलिए एक ही जीवन चक्र के साथ):

/solution-A/trunk/ClassLib 
/solution-A/trunk/WebApp 
/solution-A/tags/1.0.0/ClassLib 
/solution-A/tags/1.0.0/WebApp 

और यह सोचते हैं कि वे अलग जीवन चक्र है कि 1 से 4 के लिए & किसी अन्य के लिए एक भंडार।

/library-A/trunk/ShClassLib 
/library-A/tags/1.0.0/ShClassLib 
/library-B/trunk/ShWebService 
/library-B/tags/1.0.0/ShWebService 

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

बेशक यह संभवतः एक बिल्डिंग/रिलीज सिस्टम बाइनरी रिलीज देने में सक्षम होगा पुस्तकालयों के साथ ही रात के निर्माण के लिए।

1

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

वेब अनुप्रयोगों के लिए अक्सर वेब.config फ़ाइल को फ़ाइल में मशीन विशिष्ट सेटिंग्स होने पर कुछ सावधानीपूर्वक विचार करने की आवश्यकता हो सकती है। उदाहरण के लिए, यदि आप आईआईएस 7 चला रहे हैं और आप आईआईएस 6 के साथ बनाई गई एक परियोजना डाउनलोड करते हैं तो परियोजना फाइल को अलग-अलग स्थानों में सिस्टम मॉड्यूल और हैंडलर संदर्भों पर इंगित करने के लिए संभावित रूप से बदला जाएगा। या आपके पास मूल web.config फ़ाइल की तुलना में किसी भिन्न सर्वर को इंगित करने वाली कनेक्शन स्ट्रिंग हो सकती है। यहां भी समाधान मूल रूप से फ़ाइल को डाउनलोड करना है और फिर स्थानीय रूप से फ़ाइल को चेक आउट रखना है और इसे अपडेट न करना याद रखें।

मेरा ईमानदार सुझाव परियोजनाओं को एक ही भंडार में रखना है; खोजना और बैकअप करना आसान है।लेकिन प्रमुख बात है जब नई शाखाओं का निर्माण करने और भंडार में नई फ़ाइलें जोड़ने याद करने के लिए है:

अपने स्थानीय फ़ोल्डर में सिर्फ फ़ोल्डर भंडार पहले

चेकआउट में फ़ोल्डर बनाएँ

Explorer में कछुआ साथ फ़ाइलें जोड़ें

कमिट परिवर्तन

साइड नोट:

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

एक बात निश्चित रूप से आसान है कि नई परियोजनाओं के निर्माण है - तुम सिर्फ उपयोग कर सकते हैं सबवर्सन और VSVN में जोड़े शाखा बनाने और आप के लिए फ़ाइलों को बाहर की जाँच की देखभाल करेंगे।

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

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