दिलचस्प पोस्ट
स्मृति स्थान की सामग्री को संदर्भित करना (x 86 एड्रेसिंग मोड) पूंछ पुनर्कलन क्या है? हनोई के टॉवर: पुनरावर्ती अल्गोरिदम पीएल / एसक्यूएल में एक स्ट्रिंग को विभाजित करने के लिए कोई फंक्शन है? लिनक्स कर्नेल: सिस्टम कॉल hooking उदाहरण जावा निरर्थक जांच करें कि .equals () के बजाय == का उपयोग क्यों करें जीएचसी कोर पढ़ना वैध ईमेल पते की जांच करने के लिए पायथन? नेविगेशन नियंत्रक में वापस बटन के लिए कार्रवाई सेट करना JSF 2.2 <h: inputFile> का उपयोग कर फ़ाइल कैसे अपलोड करें? सहेजी गई फाइल कहां है? ऑरेकल एसक्यूएल में गतिशील धुरी MySQL में एक क्वेरी निष्पादित करते समय केवल _full_group_by संबंधित त्रुटि क्या है {get; सेट; } वाक्यविन्यास सी # में? पाठ को आउटलाइन प्रभाव जब जावास्क्रिप्ट के eval () बुराई नहीं है?

आपको कब शाखाएं चाहिए?

एससीएम प्रणाली के साथ काम करते समय, आपको शाखा क्यों चाहिए?

वेब के समाधान से एकत्रित समाधान "आपको कब शाखाएं चाहिए?"

शाखाओं के लिए कई उपयोग हैं एक सबसे आम उपयोगों में से एक परियोजनाओं को अलग करना है, जिनके पास एक बार आम कोड बेस था। मुख्य ट्रंक को प्रभावित किए बिना, यह आपके कोड के साथ प्रयोग करने के लिए बहुत उपयोगी है

सामान्य तौर पर, आप दो शाखा प्रकार देखेंगे:

  • फ़ीचर शाखा: यदि एक विशेष सुविधा काफी विघटनकारी है कि आप नहीं चाहते कि पूरी विकास टीम को इसके आरंभिक चरणों में प्रभावित किया जाए, तो आप एक शाखा बना सकते हैं, जिस पर यह काम करने के लिए।

  • फिक्स शाखा: मुख्य ट्रंक पर विकास जारी रहता है, लेकिन सॉफ़्टवेयर के नवीनतम रिलीज़ संस्करण में फ़िक्सेज़ को रखने के लिए एक फिक्सेस शाखा बनाई जा सकती है।

आप निम्नलिखित लेख, जो शाखाओं के सिद्धांतों को बताते हैं, और उनका उपयोग कब की जांच करने में रुचि रख सकते हैं:

  • नेड बाटकेल्डर – सबवर्जन जल्दी शुरू होने वाली शाखाएं

सामान्य शब्दों में, शाखाओं का मुख्य उद्देश्य (एक वीसीएस – वर्जन कंट्रोल सिस्टम – फीचर) को कोड अलगाव हासिल करना है

आपके पास कम से कम एक शाखा है, जो अनुक्रमिक विकास के लिए पर्याप्त हो सकती है, और उस एक ही अनूठी शाखा पर कई कार्यों के लिए उपयोग किया जाता है (प्रतिबद्ध)

लेकिन यह मॉडल इसकी सीमा को शीघ्रता से दिखाता है:

जब आपके पास एक विकास प्रयास (रिफैक्टरिंग, विकास, बग-फिक्स, …) होता है और आपको लगता है कि आप अपने मौजूदा विकास शाखा की तुलना में उसी शाखा में सुरक्षित रूप से उन परिवर्तनों को नहीं बना सकते हैं (क्योंकि आप एपीआई को तोड़ देंगे, या उस कोड का परिचय देंगे जो टूट जाएगा सब कुछ), तो आपको एक और शाखा की जरूरत है
(विरासत के लिए उस नए कोड को अलग करने के लिए, भले ही दो कोड सेट बाद में मर्ज हो जाए)

तो यही आपका जवाब है:
जब भी आप एक शाखा में दो विकास प्रयासों का पीछा और रिकॉर्ड नहीं कर सकते तब तक आपको शाखाएं चाहिए।
(बनाए रखने के लिए एक बेहद जटिल इतिहास किए बिना)


एक शाखा उपयोगी हो सकती है, भले ही आप स्रोत कोड पर काम कर रहे हैं, यदि आप बहुत से हैं
लेकिन आपको "प्रति डेवलपर एक शाखा" नहीं बनाना चाहिए:
"अलगाव" उद्देश्य एक विकास प्रयास को अलग करने के लिए किया जाता है (एक ऐसा कार्य जिसे सामान्य रूप से "चलो हमारे सॉफ्टवेयर के अगले संस्करण को विकसित करना" या "चलो बग 23 ठीक करें" के रूप में विशिष्ट) हो सकता है,
एक "संसाधन" को अलग करने के लिए नहीं

(एक शाखा जिसे "वोनसी" कहा जाता है, का अर्थ किसी अन्य डेवलपर के लिए नहीं है: यदि "वॉनसी" परियोजना छोड़ देता है तो क्या होगा? आप इसके साथ क्या कर रहे हैं?
उदाहरण के लिए एक बग ट्रैकिंग सिस्टम के संदर्भ में "बगफिक्स_212" नामक एक शाखा का व्याख्या किया जा सकता है, और किसी भी डेवलपर इसे कम से कम कुछ विचार के साथ उपयोग कर सकते हैं कि उसके साथ क्या करना है)

एक शाखा एक टैग नहीं है (एसवीएन एक रिव्यूजन सिस्टम है जो संस्करणिंग फीचर की पेशकश करने की कोशिश करता है जैसे सस्ते फ़ाइल कॉपी के साथ निर्देशिकाओं के माध्यम से शाखाएं और टैगिंग: इसका मतलब यह नहीं है कि कोई टैग एक शाखा है)

शाखा को परिभाषित करने के लिए मर्ज वर्कफ़्लो को परिभाषित करने का मतलब भी है : जब आप इसके साथ किया जाता है तो आपको अपनी शाखा को मर्ज करने के बारे में पता होना चाहिए।
इसके लिए, प्रैक्टिकल परफोर्स के अध्याय 7 (लौरा विंगरड-ओ रेली) एक अच्छी शुरुआत (वीसीएस अज्ञेयवादी) है जो विभिन्न प्रकार की शाखाओं के बीच वर्कफ़्लो को मर्ज करने के लिए है: "" सॉफ़्टवेयर कैसे विकसित होता है "(पीडीएफ)

यह कोडललाइन शब्द को परिभाषित करता है (शाखा जो कोड के महत्वपूर्ण विकास चरणों को दर्ज करता है, या तो कुछ बिंदुओं पर टैग के माध्यम से या शाखा में महत्वपूर्ण मर्ज के माध्यम से)

यह मेनलाइन मॉडल (रिलीज को रिकॉर्ड करने के लिए एक केंद्रीय कोडलाइन) पेश करता है, और शाखाओं के लिए विभिन्न उद्देश्यों का वर्णन करता है:

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

वीसीएस के आसपास अन्य दिलचस्प अवधारणाएं: मूल बातें अवधारणाएं
(के बारे में ClearCase मूलतः, लेकिन किसी भी VCS के लिए भी वैध)

सभी 21 वीं सदी एससीएम आपको बता रहे हैं:

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

आपको मिला:

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

उपकरण जो यह कर सकते हैं:

  • Git
  • अस्थिर
  • प्लास्टिक एससीएम

ऐसा उपकरण जो इसे नहीं कर सकते:

  • SVN
  • सीवीएस
  • वीएसएस
  • TFS
  • ख़ामख़ाह

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

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

जब आपको अपने कोडबेस में महत्वपूर्ण और / या प्रयोगात्मक परिवर्तन करने की आवश्यकता होती है, खासकर यदि आप मध्यवर्ती परिवर्तन करना चाहते हैं, ट्रंक को प्रभावित किए बिना

यह आप किस प्रकार के एससीएम का उपयोग कर रहे हैं पर निर्भर करता है

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

दस्तावेज़ (संक्षिप्त और पठनीय) जो मुझे समझने में मदद मिली है कि वितरित सिस्टम में क्या चल रहा था: समझना एमरिकुरियल

सेंट्रल रिपॉजिटरी (जैसे सीवीएस, एसवीएन और क्लीअरकेस) के साथ पुरानी प्रणालियों में, यह एक और अधिक गंभीर मुद्दा है जिसे टीम के स्तर पर निर्णय लेने की जरूरत है, और जवाब अधिक होना चाहिए 'अनुमति देने के लिए एक पुरानी रिलीज बनाए रखने के लिए मुख्य लाइन पर जारी रखने के लिए विकास, या 'एक प्रमुख प्रयोग के भाग के रूप में'

वितरित मॉडल बहुत बेहतर है, मुझे लगता है, और केवल प्रभावी चित्रमय उपकरण की कमी के लिए प्रभावी प्रतिमान बनने के लिए हालांकि यह व्यापक रूप से समझ नहीं है, और अवधारणाएं अलग हैं, इसलिए नए उपयोगकर्ताओं के लिए यह भ्रमित हो सकता है।

मुझे परावर्तन में लॉरा विंगर और क्रिस्टोफर सेवाल्ड की सलाह मिलती है वास्तव में संक्षिप्त और उपयोगी है:

* 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/files/pdf/perforce-best-practices.pdf देखें।

शाखाओं के लिए विभिन्न उद्देश्य हैं:

  1. फ़ीचर / बग शाखाएं सुविधा / बगफिक्स पूरा हो जाने पर, गतिशील और सक्रिय शाखाएं जो ट्रंक में वापस चली जाती हैं
  2. स्थैतिक शाखाएं (सबवर्जन में टैग, हालांकि संक्षेप में सिर्फ एक 'सामान्य शाखा')। वे कहते हैं, एक रिलीज के एक स्थिर स्नैपशॉट प्रदान करते हैं। हालांकि वे पर काम किया जा सकता है, वे अछूते रहते हैं।

जब आपको अपनी मौजूदा शाखा के आधार पर परिवर्तन करने की आवश्यकता होती है, तो उस शाखा से अगली रिलीज के लिए किस्मत नहीं रखी जाती (और पहले नहीं)

उदाहरण के लिए, हम आमतौर पर ट्रंक पर काम करते हैं रिहाई के समय के दौरान, किसी को ऐसे बदलाव करने की आवश्यकता होती है जिसे हम वर्तमान रिलीज में नहीं देखना चाहते (यह रिलीज होने से पहले हो सकता है, फिलहाल रिलीज़ होने के बाद)। यह तब होता है जब हम अपनी शाखा में रिलीज रखने और ट्रंक पर अगले रिलीज के लिए विकास जारी रखने के लिए शाखाएं करते हैं।

शाखाओं की ज़रूरत भी हो सकती है:

  • जब आप किसी विशेष ग्राहक को एक हॉटफिक्स प्रदान करना चाहते हैं (महत्वपूर्ण कहते हैं) और आप अनिश्चित हैं कि फ़िक्स भविष्य के रिलीज़ का हिस्सा होगा या नहीं
  • सभी तकनीकीताओं को एक तरफ छोड़ दिया …..

    शाखा जब आप जानते हैं कि इसे वापस मर्ज करने में आसान है!

    ध्यान में रखते हुए कि मर्जिंग हमेशा एक परियोजना में काम किए जाने के साथ प्रभावित होगी।

    एक बार जब यह अन्य सभी तृतीयक मुद्दों को हासिल किया जाए तो वह खेलेंगे।

    जब भी आप ऐसा महसूस करते हैं

    यदि आप एक केंद्रीय एससीएम के साथ काम करते हैं, तो आप शायद बहुत बार ऐसा नहीं करेंगे क्योंकि शाखाएं आधिकारिक रिपॉजिटरी का हिस्सा हैं, और यह सचमुच ज्यादा प्रयोग नहीं करता है, यह उल्लेख नहीं करता कि विलय वास्तव में चोट लगी है।

    ओटोह, वितरित एससीएम में एक शाखा और एक चेकआउट के बीच कोई तकनीकी अंतर नहीं है, और विलय बहुत आसान है आप पूरे और अधिक बार शाखाओं की तरह महसूस करेंगे