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