जवाबों:
ब्रांचिंग के लिए कई उपयोग हैं। सबसे आम उपयोगों में से एक उन परियोजनाओं को अलग करने के लिए है जिनके पास एक बार एक सामान्य कोड आधार था। यह मुख्य ट्रंक को प्रभावित किए बिना, अपने कोड के साथ प्रयोग करने के लिए बहुत उपयोगी है।
सामान्य तौर पर, आपको दो शाखा प्रकार दिखाई देंगे:
फ़ीचर ब्रांच: यदि कोई विशेष सुविधा इतनी विघटनकारी है कि आप नहीं चाहते कि पूरी विकास टीम उसके शुरुआती चरण में प्रभावित हो, तो आप एक ब्रांच बना सकते हैं, जिस पर यह काम किया जा सके।
फ़िक्सेस ब्रांच: जबकि मुख्य ट्रंक पर विकास जारी है, फ़िक्सेस शाखा को सॉफ़्टवेयर के नवीनतम रिलीज़ किए गए संस्करण में होल्ड करने के लिए बनाया जा सकता है।
आपको निम्नलिखित लेख की जाँच करने में रुचि हो सकती है, जो ब्रांचिंग के सिद्धांतों की व्याख्या करता है, और उनका उपयोग कब करना है:
सामान्य शब्दों में, कोड अलगाव को प्राप्त करने के लिए ब्रांचिंग (एक वीसीएस - संस्करण नियंत्रण प्रणाली - सुविधा) का मुख्य उद्देश्य है ।
आपके पास कम से कम एक शाखा है, जो अनुक्रमिक विकास के लिए पर्याप्त हो सकती है, और उसी अद्वितीय शाखा पर रिकॉर्डिंग (प्रतिबद्ध) होने वाले कई कार्यों के लिए उपयोग किया जाता है।
लेकिन वह मॉडल जल्दी ही अपनी सीमा दिखाता है:
जब आपके पास विकास का प्रयास (रिफैक्टिंग, विकास, बग-फिक्स, ...) और आपको एहसास होता है कि आप अपनी वर्तमान विकास शाखा की तुलना में उसी शाखा में सुरक्षित रूप से परिवर्तन नहीं कर सकते हैं (क्योंकि आप एपीआई को तोड़ देंगे, या कोड को तोड़ देंगे। सब कुछ), तो आपको एक और शाखा की आवश्यकता है ।
( उस नए कोड को विरासत के लिए अलग करने के लिए, भले ही दो कोड सेट बाद में मर्ज हो जाएं)
तो आपका जवाब वहीं है:
जब भी आप पीछा नहीं कर सकते हैं और एक शाखा में दो विकास प्रयासों को रिकॉर्ड नहीं करना चाहिए।
(बनाए रखने के लिए एक भयानक जटिल इतिहास के बिना)।
एक शाखा उपयोगी हो सकती है, भले ही आप स्रोत कोड पर केवल एक ही काम कर रहे हों, यदि आप कई हैं।
लेकिन आपको "प्रति डेवलपर एक शाखा" नहीं बनाना चाहिए:
"अलगाव" उद्देश्य एक विकास प्रयास को अलग करने के लिए बनाया गया है (एक कार्य जो सामान्य रूप से हो सकता है "चलो हमारे सॉफ़्टवेयर के अगले संस्करण को विकसित करें" या जैसा कि "चलो ठीक करें" बग 23 "),
" संसाधन "को अलग करने के लिए नहीं ।
("VonC" नामक शाखा का अर्थ किसी अन्य डेवलपर से कुछ भी नहीं है: क्या होगा यदि "VonC" परियोजना को छोड़ देता है? आप इसके साथ क्या करने वाले हैं?
"Bugfix_212" नामक शाखा का उदाहरण के लिए बग ट्रैकिंग सिस्टम के संदर्भ में व्याख्या की जा सकती है। , और कोई भी डेवलपर कम से कम कुछ विचार के साथ इसका उपयोग कर सकता है कि वह इसके साथ क्या करने वाला है)
एक शाखा एक टैग नहीं है (एसवीएन एक रिवीजन सिस्टम है, जो सस्ती फाइल कॉपी के साथ निर्देशिकाओं के माध्यम से ब्रांचिंग और टैगिंग की तरह संस्करण सुविधा का प्रस्ताव देने की कोशिश करता है : इसका मतलब यह नहीं है कि एक टैग एक शाखा है)
एक शाखा को परिभाषित करने का मतलब है कि एक मर्ज वर्कफ़्लो को परिभाषित करना : आपको यह जानने की ज़रूरत है कि जब आप इसके साथ कर रहे हैं तो अपनी शाखा को कहाँ मर्ज करें।
उसके लिए, विभिन्न प्रकार की शाखाओं के बीच वर्कफ़्लो को मर्ज करने के लिए प्रैक्टिकल परफोर्स (लॉरा WINGERD - O'Reilly) का अध्याय 7 एक अच्छा परिचय (VCS अज्ञेय) है: " हाउ सॉफ्टवेयर इवॉल्व्स " (pdf)
यह शब्द कोडलाइन को परिभाषित करता है (शाखा जो कोड के महत्वपूर्ण विकास के चरणों को रिकॉर्ड करती है, या तो कुछ बिंदुओं पर टैग के माध्यम से, या शाखा में महत्वपूर्ण विलय के माध्यम से)
यह मेनलाइन मॉडल (रिलीज को रिकॉर्ड करने के लिए एक केंद्रीय कोडलाइन) पेश करता है, और शाखा लगाने के विभिन्न उद्देश्यों का वर्णन करता है:
VCS के आसपास अन्य दिलचस्प अवधारणाएं: मूल बातें
(मूल रूप से ClearCase के बारे में, लेकिन यह भी किसी VCS के लिए मान्य है)
सभी 21 वीं सदी के SCM आपको बता रहे हैं:
प्रत्येक कार्य के लिए शाखा , जिस पर आप काम करना चाहते हैं, चाहे वह कोई भी नई सुविधा हो, बगफिक्स, परीक्षण, जो भी हो। इसे विषय शाखा कहा जाता है, और यह आपके SCM के साथ काम करने के तरीके को बदल देता है।
आपको मिला:
उपकरण जो इसे कर सकते हैं:
उपकरण जो ऐसा नहीं कर सकते हैं:
यह उस SCM टूल पर भी निर्भर करता है जिसका आप उपयोग कर रहे हैं। आधुनिक एससीएम (गिट, मर्क्यूरियल, आदि) जब भी शाखाओं को बनाने और नष्ट करने के लिए तेजी से आसान बनाते हैं। यह आपको अनुमति देता है, उदाहरण के लिए, प्रति बग एक शाखा बनाएं जिस पर आप काम कर रहे हैं। एक बार जब आप अपने परिणामों को ट्रंक में विलय कर देते हैं, तो आप शाखा को छोड़ देते हैं।
अन्य एससीएम, उदाहरण के लिए तोड़फोड़ और सीवीएस, एक बहुत "भारी" शाखाओं में प्रतिमान है। इसका मतलब है, एक शाखा को केवल बीस-कुछ-रेखा पैच से बड़ी चीज के लिए उपयुक्त माना जाता है। वहां, शाखाओं को पिछले या भविष्य के उत्पाद संस्करण की तरह, संपूर्ण विकास पटरियों को ट्रैक करने के लिए उपयोग किया जाता है।
जब आपको अपने कोडबेस में महत्वपूर्ण और / या प्रायोगिक परिवर्तन करने की आवश्यकता होती है, खासकर यदि आप ट्रंक को प्रभावित किए बिना मध्यवर्ती परिवर्तन करना चाहते हैं।
यह निर्भर करता है कि आप किस प्रकार के SCM का उपयोग कर रहे हैं।
नए वितरित संस्करणों (जैसे गिट और मर्क्यूरियल) में, आप हर समय शाखाएं बना रहे हैं और वैसे भी फिर से चल रहे हैं। मैं अक्सर थोड़ी देर के लिए एक अलग शाखा पर काम करूंगा क्योंकि किसी ने मेनलाइन पर निर्माण को तोड़ दिया है, या क्योंकि नेटवर्क डाउन हो गया है, और फिर बाद में जब यह ठीक हो जाता है, तो इसमें विलय हो जाता है, और ऐसा करना इतना आसान है कि यह कष्टप्रद भी नहीं है। ।
दस्तावेज़ (छोटा और पठनीय) जिसने मुझे यह समझने में मदद की कि वितरित प्रणालियों में क्या हो रहा है: अंडरस्टैंडमर्क्यूरियल ।
केंद्रीय रिपॉजिटरी के साथ पुरानी प्रणालियों में, (सीवीएस, एसवीएन और क्लियरकेस की तरह), फिर यह बहुत अधिक गंभीर मुद्दा है जिसे टीम स्तर पर तय करने की आवश्यकता है, और उत्तर देने के लिए एक पुराने रिलीज को बनाए रखने के लिए 'अधिक पसंद होना चाहिए' मुख्य लाइन 'या' एक प्रमुख प्रयोग के भाग के रूप में 'जारी रखने के लिए विकास।
वितरित मॉडल बहुत बेहतर है, मुझे लगता है, और प्रमुख प्रतिमान बनने के लिए केवल अच्छे चित्रमय उपकरणों का अभाव है। हालांकि यह उतना व्यापक रूप से नहीं समझा गया है, और अवधारणाएं अलग हैं, इसलिए यह नए उपयोगकर्ताओं के लिए भ्रमित हो सकता है।
मुझे लगता है कि Perforce में लौरा विंगर और क्रिस्टोफर सीवाल्ड से सलाह वास्तव में संक्षिप्त और उपयोगी है:
* Branch only when necessary.
* Don't copy when you mean to branch.
* Branch on incompatible policy.
* Branch late.
* Branch, instead of freeze.
उनमें से प्रत्येक की विस्तृत व्याख्या और अन्य सर्वोत्तम अभ्यास के लिए http://www.perforce.com/sites/default/piles/pdf/perforce-best-practices.pdf देखें ।
शाखा लगाने के विभिन्न उद्देश्य हैं:
शाखा लगाने की आवश्यकता भी उत्पन्न हो सकती है:
जब भी आपका मन करे।
आप शायद बहुत बार नहीं होंगे यदि आप एक केंद्रीकृत SCM के साथ काम करते हैं क्योंकि शाखाएं आधिकारिक रिपॉजिटरी का हिस्सा हैं, और यह वास्तव में बहुत प्रयोग को आमंत्रित नहीं करता है, यह उल्लेख करने के लिए नहीं कि मर्ज वास्तव में चोट लगी है।
OTOH, वितरित SCM में शाखा और चेकआउट के बीच कोई तकनीकी अंतर नहीं है, और मर्ज बहुत आसान है। आप एक पूरे बहुत अधिक बार शाखाओं में बंटी की तरह महसूस करेंगे।
जब आपको अपनी वर्तमान शाखा के आधार पर परिवर्तन करने की आवश्यकता होती है, तो उस शाखा से अगली रिलीज़ के लिए नियत नहीं (और इससे पहले नहीं)।
उदाहरण के लिए, हम आम तौर पर ट्रंक पर काम करते हैं। रिलीज के समय, किसी को एक बदलाव करने की आवश्यकता होती है जिसे हम वर्तमान रिलीज में नहीं चाहते हैं (यह रिलीज से पहले हो सकता है, फिलहाल यह रिलीज के बाद आमतौर पर है)। यह तब होता है जब हम अपनी शाखा पर रिलीज डालते हैं और ट्रंक पर अगली रिलीज के लिए विकास जारी रखते हैं।
सभी तकनीकी को एक तरफ छोड़कर .....
शाखा जब आप वापस विलय करने के लिए अपने आसान पता है!
यह ध्यान में रखते हुए कि विलय एक परियोजना में कैसे काम किया जाता है, से प्रभावित होगा।
एक बार यह हासिल करने के बाद अन्य सभी तृतीयक मुद्दे खेलने के लिए आ जाएंगे।