मान लें कि आप दो संस्करण नियंत्रण प्रणाली (VCSs) आप का उल्लेख किया, सबवर्सन (SVN) होगा करने के लिए सीमित कर रहे हैं लगभग हर सम्मान में स्पष्ट, आसान और बेहतर समर्थन प्राप्त करें, जब तक आप उस बिंदु तक नहीं पहुंच जाते जहां आपको कई शाखाओं का समर्थन करना होगा।
जब आपको कई संस्करणों में कोड (जैसे बग फिक्स) को मर्ज करने की आवश्यकता होती है, तो किसी भी महत्वपूर्ण आकार की सुविधाओं के समानांतर विकास या डेवलपर्स की थोड़ी बड़ी टीम द्वारा क्लीयरकेस, और अधिक विशेष रूप से शाखाओं में विकसित करने और उन्हें मर्ज करने की क्षमता का समर्थन करते हैं। एक साथ आसानी से, सभी अतिरिक्त दर्द और जटिलता के लायक बन जाएंगे - खासकर यदि आपके लिए ClearCase पहले से ही प्रबंधित किया जा रहा है।
अनुभव
मैं एक व्यक्ति के बीच के साथ ClearCase का उपयोग किया है (मुझे) और 400 से अधिक लोगों को, यह कई दिन के लिए दिन के खीज, प्रयोज्य मुद्दों और दोष है, लेकिन यह लगातार प्राप्त करने के लिए हमें की अनुमति देता है काम एक साथ किया। हर समय ClearCase स्थापना पूर्णकालिक प्रशासकों को समर्पित किया था।
मैंने अपने आप से और एक अन्य व्यक्ति के साथ सबवर्जन का उपयोग किया है, और यह दिन-प्रतिदिन महान काम करता है (मेरे लिए छोड़कर कोई प्रशासक नहीं है) लेकिन यह कभी-कभी कभी-कभी तथ्य के कारण निराशा का एक महत्वपूर्ण स्रोत बन जाता है यह किसी भी महत्वपूर्ण शाखा को संभालने और परिस्थितियों में विलय नहीं कर सकता है।
एसवीएन समानांतर विकास और शाखाओं का समर्थन करने में गरीब क्यों है?
एसवीएन विकास की समांतर रेखाओं के समर्थन में विफल रहता है क्योंकि इसकी शाखाओं को एक साथ विलय करने के लिए बहुत ही कमजोर स्वचालित समर्थन है। इसके विपरीत, मेरे द्वारा लिखे गए सभी अन्य वीसीएस में शाखाओं को एक साथ विलय करने के लिए अच्छा समर्थन है; आम मामलों के लिए यह एक शून्य प्रयास ऑपरेशन है।
ब्रांचिंग मानव जीवन में संस्करण नियंत्रण प्रणाली मॉडल समेकन का तरीका है (उदाहरण के लिए दो डेवलपर समानांतर में दो अलग-अलग मुद्दों पर काम करते हैं, या एक डेवलपर जिसके पास एक ही समय में कई समस्याएं खुलती हैं)। लेकिन ब्रांचिंग बेकार है यदि आप आसानी से सभी के काम को एक सुसंगत रूप से संयोजित नहीं कर सकते हैं!
ब्रांचिंग स्पष्ट रूप से हो सकती है (इसमें वे वीसीएस द्वारा नामित और समझी जाती हैं) या निहित रूप से (फ़ाइलों की एक सामान्य प्रति या चेकआउट के रूप में)। एसवीएन दोनों का समर्थन करता है, लेकिन एसवीएन शाखा में आमतौर पर एक सीमित सीमित फैशन में किया जाता है। प्रत्येक चेक आउट एक शाखा है लेकिन सभी शाखाओं को प्रत्येक प्रतिबद्ध/अद्यतन पर सिंक्रनाइज़ करने के लिए मजबूर होना पड़ता है। ऐसा इसलिए होता है क्योंकि एसवीएन स्पष्ट शाखाओं के आसान विलय का समर्थन नहीं करता है और इसलिए स्पष्ट शाखाएं शायद ही कभी बनाई जाती हैं।
जैसा कि आपको प्रत्येक प्रतिबद्धता पर एक दूसरे के साथ सिंक्रनाइज़ करने के लिए मजबूर होना पड़ता है, यह टीम के भीतर संभावित समांतरता को कम करता है। यह आदर्श विकास प्रथाओं से कुछ कम भी होता है क्योंकि आप अपने दिन-प्रतिदिन की विकास आवश्यकताओं के लिए संस्करण नियंत्रण प्रणाली का प्रभावी ढंग से उपयोग नहीं कर सकते हैं। यह आपकी व्यक्तिगत शाखाओं में अलग-अलग विचारों को आज़माने के लिए बहुत कठिन होता है और आप एक फीचर को परिष्कृत करते समय कई काम नहीं कर सकते हैं। जब तक आप अपनी आखिरी प्रतिबद्धता में समस्या को ठीक नहीं करते हैं, तब तक आप बहुत जल्दी प्रतिबद्ध होने और हर किसी के काम को तोड़ने की संभावना रखते हैं।
अन्य प्रमुख मुद्दा यह है कि, के बाद से स्पष्ट शाखाओं विलय अच्छी तरह से समर्थित नहीं है, SVN आप लोगों के बीच और शाखाओं के बीच कोड में परिवर्तन के लिए कदम की मदद करने का एक गरीब काम करता है। कल्पना कीजिए शाखा और विकास शाखा दोनों में एक बग को ठीक करने की कोशिश कीजिए; वैकल्पिक रूप से कल्पना करें कि दो डेवलपर्स संबंधित फीचर पर काम कर रहे हैं और दोनों को एक दूसरे को बदलने की जरूरत है, लेकिन केवल नियंत्रित बिंदुओं पर। SVN का उपयोग करके आप इन कार्यों को पूरा कर सकते हैं लेकिन VCS सहायता करने के लिए बहुत कम करता है और आप मैन्युअल रूप से तैयार करने और पैच को बनाए रखने या फ़ाइलों के आसपास जहाज के लिए तैयार रहना चाहिए।
अन्य VCSs में आप एक शाखा बग समाधान या अन्य विभिन्न शाखाओं में एक सुविधा युक्त विलय करने के लिए VCS पूछ सकते हैं। दिन के अंत में इन सभी शाखाओं (जिसमें स्वयं अन्य शाखाओं की सामग्री होती है) को फिर मुख्य शाखा में विलय कर दिया जा सकता है। अधिक बार नहीं इस का सबसे VCS द्वारा स्वचालित रूप से और सही ढंग से नियंत्रित किया जाएगा की तुलना में, SVN स्वचालित लचीलापन इस तरह की होने और समानांतरवाद लगभग अकल्पनीय है के साथ है, जबकि।
बड़ी टीमों को स्वचालित विलय के लिए मजबूत समर्थन के बिना काम मिल जाता है लेकिन यह व्यक्तियों और टीम संगठन, संचार और प्रक्रिया दोनों पर अधिक बोझ डालता है।
फ्लिप पक्ष पर, आसान ब्रांचिंग और विलय का नकारात्मक पक्ष यह है कि आपको नियमित अंतराल पर एक साथ परिवर्तन विलय करने के बारे में संगठित और कठोर होना चाहिए क्योंकि यह स्वचालित रूप से और नहीं होता है।
अन्य विकल्प
अब अगर हम एक कदम पीछे जाएं और अन्य प्रणालियों पर विचार करें, अपने भंडार संभालने ज्यादातर पाठ आधारित है और अपेक्षाकृत छोटे (कुछ सौ एमबीएस से भी कम) है, मैं आप को गंभीरता से सुझाव है कि प्रयोग करने पर विचार BZR। बीजेडआर कम से कम एसवीएन के रूप में उपयोग करना आसान है, खासकर यदि आप पहले से ही एसवीएन जानते हैं। यह कम से कम एक डेवलपर के परिप्रेक्ष्य से सभी महत्वपूर्ण मामलों में ClearCase के रूप में शक्तिशाली है; यह विकास के कई धाराओं (शाखाओं) का समर्थन करता है और उन्हें एक साथ वापस विलय करने के लिए अच्छा समर्थन है। साथ ही यह आवश्यकतानुसार विकास की केंद्रीकृत शैली का समर्थन कर सकता है।
हालांकि मुझे इसके साथ कोई अनुभव नहीं है, मुझे यह भी उल्लेख करना चाहिए कि आप bzr-svn के साथ एक एसवीएन सर्वर तक पहुंचने के लिए BZR टूल का उपयोग कर सकते हैं और यह आपको होस्टिंग का लाभ होने पर बीजेडआर की अधिक लाभ और विलय क्षमताओं को दे सकता है व्यापक रूप से समझा एसवीएन मंच पर आपका कोड।
जबकि मैंने ओपन सोर्स वितरित संस्करण नियंत्रण प्रणाली (डीवीसीएस) की दुनिया में बीजेडआर का सुझाव दिया है, तो कई लोग GIT के साथ जा रहे हैं। मैंने यह सुझाव नहीं दिया है, हालांकि यह एसवीएन पृष्ठभूमि से आने वाले उपयोगकर्ताओं पर बहुत अधिक सीखने की वक्र को मजबूर करता है और मुझे लगता है कि जंगली में कई टीम बेहतर विंडोज़ समर्थन और जीआईटी के स्केलेबिलिटी और स्पीड फायदे के ऊपर बीजेडआर के उपयोग को आसान बनाती हैं। ।
यदि आप बीजेडआर या जीआईटी जैसे डीवीसीएस के साथ जाना चुनते हैं तो आपको शायद जिस DVCS का उपयोग शुरू करना है, उस पर आपको बहुत लटका पाने की आवश्यकता नहीं है। व्यापक रूप से प्रयुक्त सिस्टम सभी एक-दूसरे के बीच निर्यात और आयात का समर्थन करते हैं और कम से कम एसवीएन से आयात कर सकते हैं।
क्यों लगता है कि सबवर्सन उन परिदृश्यों के लिए अच्छा नहीं है जहां मुझे समांतर विकास और शाखा की आवश्यकता होगी? – Manoj
मनोज: मैंने आपके प्रश्न को आजमाने और कवर करने के लिए अपना जवाब अपडेट कर दिया है। – Jared
'svn copy' का उपयोग स्पष्ट रूप से शाखा के लिए किया जा सकता है और जिन्हें वांछित नाम दिया जा सकता है। 'svn विलय' शाखाओं को एक साथ वापस विलय कर सकता है (यह नहीं कि यह एक महान काम करता है)। हालांकि मैं आपके मूल्यांकन के साथ काफी हद तक सहमत हूं, एसवीएन विलय और समानांतर विकास को आसान नहीं बनाता है, मुझे "स्पष्ट शाखाएं अच्छी तरह से समर्थित नहीं हैं" और संबंधित बयानों को आपके मुख्य बिंदु से अलग होने वाली तथ्यात्मक त्रुटियों के रूप में समस्याएं लेनी पड़ती हैं। मैं कोई फैनबॉय नहीं हूं लेकिन मैं अभी एक एसवीएन शाखा पर काम कर रहा हूं, और यहां एक और टीम आमतौर पर व्यक्तिगत शाखाओं पर कोड करती है और जब वे पूर्ण हो जाते हैं तो वे वापस ट्रंक में विलय करते हैं। –