हाल ही में मुझे जीआईटी में एक वर्कफ़्लो की तीन अवधारणाएं मिली हैं: गिटफ्लो, गिटहब फ्लो और गिटलैब फ्लो। मैंने इसके बारे में अच्छा लेख पढ़ा है (https://docs.gitlab.com/ee/workflow/gitlab_flow.html) लेकिन मुझे गिटलैब प्रवाह बहुत अच्छी तरह से समझ में नहीं आता है। शायद क्योंकि मैं मूल निवासी नहीं हूं :)गिटहब फ्लो और गिटलैब फ्लो के बीच क्या अंतर है?
संक्षेप में।
गिटफ्लो (https://docs.gitlab.com/ee/workflow/gitdashflow.png)।
हमारे पास एक उत्पादन शाखा के रूप में एक मास्टर शाखा है। इसके अलावा हमारे पास एक विकास शाखा है जहां हर डेवलपर अपनी विशेषताओं को विलीन करता है। कभी-कभी हम उत्पादन में हमारी सुविधाओं को तैनात करने के लिए एक रिलीज शाखा बनाते हैं। अगर हमारे पास रिलीज शाखा में एक बग है, तो इसे ठीक करें और विकास शाखा में बदलाव खींचें। अगर हमारे पास उत्पादन में एक महत्वपूर्ण बग है, तो नई हॉटफिक्स-शाखा बनाएं, बग ठीक करें और उत्पादन (मास्टर) के साथ शाखा मर्ज करें और शाखाएं विकसित करें।
यह दृष्टिकोण बहुत अच्छा है अगर हम शायद ही कभी हमारे काम के परिणाम दिखाते हैं। (शायद 2 सप्ताह प्रति बार एक समय)।
गिटहब फ्लो (https://docs.gitlab.com/ee/workflow/github_flow.png)।
हमारे पास एक उत्पादन शाखा के रूप में एक मास्टर शाखा है। और हम (डेवलपर्स के रूप में) केवल नई सुविधाओं को जोड़ने या बग फिक्स करने और उत्पादन (मास्टर) शाखा के साथ मर्ज करने के लिए शाखाएं बना सकते हैं। यह बहुत आसान लगता है। यह दृष्टिकोण चरम प्रोग्रामिंग के लिए फिट बैठता है जहां उत्पादन शाखा एक दिन में कई बार तैनात की जाती है।
गिटलैब प्रवाह (https://docs.gitlab.com/ee/workflow/production_branch.png, https://docs.gitlab.com/ee/workflow/environment_branches.png, https://docs.gitlab.com/ee/workflow/release_branches.png)।
मैंने पूर्व-उत्पादन, एक उत्पादन, एक रिलीज (स्थिर) शाखा और एक स्टेजिंग वातावरण, एक पूर्व उत्पादन वातावरण, एक उत्पादन वातावरण जैसे नए शब्द देखा है। उनके बीच उनके संबंध क्या हैं?
मैं इसे इस तरह समझता हूं: यदि हमें एक नई सुविधा जोड़ने की आवश्यकता है तो हम मास्टर शाखा से प्री-प्रोडक्शन शाखा तैनात करते हैं। जब हमने इस सुविधा को पूरा कर लिया है तो हम प्री-प्रोडक्शन शाखा से उत्पादन शाखा तैनात करते हैं। एक पूर्व उत्पादन शाखा मध्यवर्ती चरण है। और फिर मास्टर शाखा उत्पादन शाखा से सभी परिवर्तन खींचती है।
यदि हम प्रत्येक अलग सुविधा देखना चाहते हैं तो दृष्टिकोण अच्छा है। हम सिर्फ उस शाखा में चेकआउट करते हैं जिसे हमें चाहिए और देखें।
लेकिन अगर हमें अपना काम दिखाना है तो हम जितनी देर हो सके टैग के साथ रिलीज शाखा बनाते हैं। यदि बाद में हम मास्टर शाखा में बग ठीक करते हैं तो हमें चेरी की आवश्यकता होती है-उन्हें अंतिम रिलीज शाखा में ले जाएं। अंत में हमारे पास टैग के साथ रिलीज शाखा है जो हमें संस्करणों के बीच स्थानांतरित करने में मदद कर सकती है।
क्या मेरी दृष्टि सही है? पुल और चेरी-पिक के बीच क्या अंतर है?