मैंने दो मुख्य परिदृश्यों में उपयोग की जाने वाली डेवलपर शाखाएँ देखी हैं:
ओपन-सोर्स समुदाय, जहां ये शाखाएं वास्तव में रिपॉजिटरी कांटे हैं, ताकि परियोजना के रखरखाव मास्टर रिपॉजिटरी तक पहुंच को बंद कर सकें और पुल अनुरोधों के माध्यम से एकीकरण की आवश्यकता हो। यह योगदानकर्ताओं के लिए जीवन को और अधिक कठिन बना देता है, लेकिन अनुरक्षकों के लिए बहुत आसान है, जो वास्तव में बिंदु है, और यह गिटहब पर एक बहुत ही सफल मॉडल है।
टीमें और संगठन जिनके पास निरंतर एकीकरण नहीं है और उनकी तैनाती में अस्थिरता का ट्रैक रिकॉर्ड है, या उनके निर्माण में बदतर, अस्थिरता है। ये टीमें आम तौर पर मेनलाइन की स्थिरता की रक्षा के लिए डेवलपर शाखाओं का उपयोग करने का प्रयास करती हैं, और परिणाम है - आम तौर पर - रिलीज से पहले एक लंबी और बहुत दर्दनाक मर्ज की अवधि, इसके बाद एक लंबी और अधिक दर्दनाक स्थिरीकरण अवधि, जो कभी-कभी होती है। रिलीज के बाद तक ऐसा नहीं होता है ।
मैं नहीं चाहता कि यह इस बारे में शेख़ी हो कि आपको सीआई की आवश्यकता क्यों है, लेकिन यह आपके प्रश्न से स्पष्ट है कि आप जानते हैं कि आप अपने परिवर्तनों को अक्सर एकीकृत नहीं कर रहे हैं, इसलिए IMO का मुद्दे के आसपास नृत्य करने का कोई मतलब नहीं है।
जब तक आप वास्तव में भौगोलिक रूप से वितरित टीम में बाहर के डेवलपर्स से "गेट" परिवर्तन की आवश्यकता के साथ काम कर रहे हैं, तब तक शाखा-प्रति-डेवलपर मॉडल वास्तव में बहुत मायने नहीं रखता है। यह विशेष रूप से समझ में नहीं आता है, क्योंकि प्रत्येक डेवलपर के पास पहले से ही तकनीकी रूप से उसका अपना भंडार है। अधिकांश संगठनों को बहुत बार एकीकृत किया जाना चाहिए - जैसे कि, प्रति दिन कई बार।
मैं वर्तमान में 4 अलग-अलग टीमों में विभाजित लगभग 35 योगदानकर्ताओं के एक समूह का हिस्सा हूं, ज्यादातर लोग दिन में कम से कम 2-3 बार, कुछ लोग 10-15 बार चेक करते हैं; यह देखने के लिए असामान्य है कि टूटे हुए और अत्यंत दुर्लभ हैं उनके लिए कुछ मिनटों से अधिक समय तक टूटे रहना। Git हैंडल बहुत आसानी से विलय कर देता है ताकि दूरस्थ डेवलपर शाखाएं अनावश्यक ओवरहेड हो जाएं। बस खींचने, स्थानीय रूप से मर्ज करने और पुश करने से पहले प्रतिबद्ध परीक्षण चलाएं, यह सरल है।
यदि आप मास्टर शाखा की स्थिरता की रक्षा के लिए एकीकरण को पूरी तरह से स्थगित करना चाहते हैं , तो विशिष्ट, सिद्ध मॉडल एक अस्थिर शाखा का उपयोग करना है - जिसे कभी-कभी एक विकास शाखा कहा जाता है , जैसा कि ए सफल गेट ब्रांचिंग मॉडल में वर्णित है । यदि दिन में कम से कम एक बार डेवलपर्स इस शाखा में सफलतापूर्वक विलय नहीं कर सकते हैं (जिसे केवल निर्माण करने की जरूरत है , त्रुटिपूर्ण रूप से नहीं) तो आपको एक गुणवत्ता / अनुशासन समस्या है और एक संशोधन नियंत्रण समस्या नहीं; गैर-एकीकृत डेवलपर शाखाओं का उपयोग करके इसे कवर करने से केवल समस्या का बचाव होता है, और ऐसा करने से, वास्तव में अंततः मर्ज बहुत अधिक दर्दनाक और अस्थिर हो जाता है, जिसकी उन्हें वास्तव में आवश्यकता होती है।
सुविधा शाखाएं सबसे खराब नहीं हैं, लेकिन IMO बहुत कम परियोजनाएं वास्तव में उन्हें वारंट करने के लिए काफी बड़ी हैं; यदि आपकी परियोजना बहुत बड़ी है (यानी एक ही बार में काम किए जा रहे सुविधाओं के टन) तो आप इसे अलग-अलग स्वायत्त घटकों में विभाजित करने से बेहतर परिणाम देखेंगे, जहां आप स्रोत नियंत्रण के साथ समस्या पर पैपिंग करेंगे।
आप चाहें तो इस सलाह को नजरअंदाज कर सकते हैं, और कई टीमें ऐसा करती हैं, लेकिन ऊपर दिए गए ब्रांचिंग मॉडल के कारणों में से एक इतना लोकप्रिय और सफल है कि यह निरंतर एकीकरण के साथ काम करने के लिए बनाया गया है , इसके खिलाफ नहीं।