यह एक कठिन समस्या है लेकिन एक है जो कई लोगों का सामना करती है। मैं एक प्रारंभिक बिंदु के रूप में Gitflow सेटअप का उपयोग करना पसंद करता हूं।
विकास -> नया सामान
मास्टर पर काम किया जा रहा है -> तैयार सामान की आवश्यकता है परीक्षण उत्पादन -> सामान जो उत्पादन के लिए प्रकाशित किया गया है।
छोटी (छोटी) विशेषताओं में, मैं विकास से एक शाखा बनाता हूं, वहां काम करते हैं फिर शाखा को विकास में वापस मिलाते हैं।
प्रमुख (दीर्घकालिक) विशेषताओं में मैं विकास से एक शाखा बनाता हूं, उस शाखा से छोटी शाखाएं बनाता हूं, फिर वापस पहली शाखा में विलय कर देता हूं। एक बार जब प्रमुख विशेषता पूरी हो जाती है तो विकास शाखा में वापस चली जाती है।
नियमित अंतराल पर (परियोजना पर निर्भर करता है) मैं विकास को वापस मास्टर में विलय करता हूं और एक परीक्षण चक्र शुरू होता है। यदि परीक्षण में कोई सुधार आता है, तो वे मास्टर शाखा (उप शाखा तो विलय) में की जाती हैं। और परीक्षण के दौरान मास्टर शाखा पर विकास जारी रह सकता है।
किसी भी समय मास्टर को विकास में विलय कर दिया जाना चाहिए, और विकास को किसी भी दीर्घकालिक उप शाखाओं में विलय कर दिया जाना चाहिए।
मास्टर हमेशा (सिद्धांत में) उत्पादन के लिए तैयार होना चाहिए। विकास हमेशा (सिद्धांत में) उत्पादन के लिए तैयार होना चाहिए। केवल एक कारण है कि यह परीक्षण करने के लिए परीक्षकों के लिए सुविधाओं का एक ठोस सेट प्रदान करने के लिए एक अंतर है।
तैयार होने पर, परीक्षण में मास्टर की एक प्रतिबद्धता को उत्पादन में मिला दिया जाता है और उत्पादन में तैनाती उस शाखा से होती है। HOTFIXs जिन्हें आपातकाल में करने की आवश्यकता होती है, तब मास्टर में विलय किए बिना उत्पादन शाखा पर जगह ले सकता है (जिसमें कई अन-परीक्षणित परिवर्तन हो सकते हैं)।
मेरा सामान्य पेड़ जैसा दिखता है
LongTerm -> Development -> Master -> Production
LongTerm <- Development | |
| Development -> Master |
LongTerm <- Development -> Master |
Development <- Master |
Master -> Production
यह मेरा सामान्य नियम है कि किसी भी परिवर्तन में कुछ घंटों के बाद अधिक नहीं होना चाहिए। अगर ऐसा होता है तो इसे छोटे बदलावों में बदलने की जरूरत है। यदि यह एक बड़ी विशेषता है (जैसे कि यूआई री-राइट) तो यह लंबे समय तक चलता है ताकि सामान्य विकास उसी समय जारी रह सके। लॉन्गटर्म शाखाएँ आम तौर पर केवल स्थानीय शाखाएँ होती हैं, जबकि विकास, मास्टर और उत्पादन दूरस्थ शाखाएँ होती हैं। कोई भी उप शाखाएं भी केवल स्थानीय होती हैं। यह दीर्घकालिक सुविधा सेट पर गिट की उपयोगिता को खोए बिना, दूसरों के लिए भंडार को साफ रखता है।
हालांकि, मैं यह नोट करना चाहूंगा कि एक दीर्घकालिक शाखा का अस्तित्व एक दुर्लभ चीज है। आम तौर पर, मेरा सारा काम विकास में है। केवल जब मेरे पास एक विशेषता (सेट) है जो इतना लंबा समय लेने वाली है कि मुझे सामान्य देव सामान पर भी काम करने में सक्षम होने की आवश्यकता है, क्या मैं लॉन्गटर्म शाखा का उपयोग करता हूं। अगर यह सिर्फ एक परिवर्तन का एक सेट है जो एक साथ होना चाहिए तो मैं बस तब तक मास्टर में विलय नहीं करता जब तक कि सभी काम नहीं हो जाते।