साप्ताहिक शिपिंग के लिए Trunk-based development बनाम GitFlow
साप्ताहिक शिपिंग के लिए Trunk-based development बनाम GitFlow: मर्ज friction, रिलीज़ अनुमाननीयता, हॉटफिक्स और QA स्थिरता की तुलना।

गलत ब्रांचिंग मॉडल से साप्ताहिक शिपिंग कब गड़बड़ हो जाती है
साप्ताहिक शिपिंग सरल सुनाई देती है—जब तक कि वह सप्ताह न आ जाए जिसमें आप चूक जाते हैं। गुरुवार को बिल्ड “लगभग तैयार” होता है, QA शुक्रवार देर से समस्याएँ ढूँढता है, और सोमवार क्लीन शुरुआत के बजाय सफ़ाई में बदल जाता है।
एक बड़ा कारण आपका ब्रांचिंग मॉडल है। यह तय करता है कि बदलाव कब मिलते हैं, इंटीग्रेशन कहाँ होता है, और कुछ टूटने पर आप कितनी जल्दी वापस आ सकते हैं। अगर इंटीग्रेशन को सप्ताह के अंत तक टाला जाता है, तो आपको merge conflicts, अचानक बग और अस्थिर टेस्ट वातावरण के रूप में कीमत चुकानी पड़ती है।
जब वर्कफ़्लो आपके ख़िलाफ़ काम कर रहा होता है, तो आमतौर पर ऐसा लगता है:
- मर्ज़ फीचर के काम की तुलना में ज़्यादा समय लेते हैं।
- QA गलत बदलावों के मिश्रण का परीक्षण करता है क्योंकि ब्रांच डिफ्रेक्ट कर लेते हैं।
- रिलीज़ बातचीत का विषय बन जाती है बजाय एक रूटीन के।
- हॉटफिक्स पैनिक ट्रिगर करते हैं क्योंकि किसी को भरोसा नहीं होता कि और क्या शिप होगा।
- लोग QA पर भरोसा खो देते हैं और अपवाद माँगने लगते हैं।
ब्रांचिंग QA की स्थिरता को भी आकार देती है। अगर QA बार-बार आंशिक रूप से इंटीग्रेटेड कोड पाथ्स पर उछलता रहता है, तो वह एक मूविंग टार्गेट बन जाता है। यहाँ तक कि कड़े परीक्षक भी स्पष्ट उत्तर नहीं दे पाते जब टेस्ट किए जा रहे सिस्टम में हर कुछ घंटों में बदलाव होता है, या एक देर से मर्ज चुपचाप वह चीज़ बदल देता है जिसे उन्होंने कल टेस्ट किया था।
इसीलिए टीमें साप्ताहिक रिलीज़ रिदम पर जाने पर अक्सर trunk-based development और GitFlow की तुलना करती हैं। उपयोगी सवाल यह नहीं है कि कौन सा लोकप्रिय है, बल्कि कौन सा मॉडल merge दर्द घटाता है, रिलीज़ को अनुमाननीय बनाता है, हॉटफिक्स को सुरक्षित और तेज़ बनाता है, और QA को अर्थपूर्ण रखता है।
मान लीजिए एक छोटी-से-मध्यम टीम, एक साझा रेपो, हर push पर CI चलता है। आप एक वेब ऐप और API शिप कर सकते हैं, या टीम का कुछ हिस्सा AppMaster जैसा विज़्युअल प्लेटफ़ॉर्म उपयोग करके विज़ुअली बना रहा हो पर फिर भी जनरेटेड कोड और डिप्लॉयमेंट्स को किसी भी अन्य प्रोडक्ट टीम की तरह मैनेज कर रहा हो।
अगर आपका वर्तमान प्रोसेस बड़े, सप्ताह-के-आखिर के मर्ज बनाता है, तो आपकी साप्ताहिक कॅडेंस फिसलती रहेगी। अगर यह छोटे, बार-बार इंटीग्रेशन को प्रोत्साहित करता है, तो साप्ताहिक रिलीज़ उबाऊ लगने लगती है (सकारात्मक अर्थ में)।
ट्रंक-बेस्ड डेवलपमेंट और GitFlow सामान्य भाषा में
दोनों ही तरीके बस ब्रांचों के उपयोग के नियम हैं ताकि काम "प्रगति पर" से "रिलीज़" तक बिना अफरा-तफरी के जा सके। असली फर्क यह है कि आप कितनी लॉन्ग-लाइव ब्रांच रखते हैं, और काम दूसरों के कोड से मिलने से पहले कितना समय तक अलग रहता है।
- Trunk-based में लगभग सब कुछ
mainके पास रखा जाता है। - GitFlow में अलग लेन होते हैं ongoing work और release stabilization के लिए।
Trunk-based development (साधारण शब्दों में)
Trunk-based development main (ट्रंक) को केंद्र मानता है। लोग शॉर्ट-लिव्ड ब्रांचों (घंटों से एक-दो दिन तक) में काम करते हैं, अक्सर वापस मर्ज करते हैं, और main को रिलीज़ेबल स्थिति में रखते हैं।
अगर कुछ तैयार नहीं है, तो या तो उसे इतना छोटा रखें कि जल्दी खत्म हो जाए, या उसे फीचर फ्लैग के पीछे छुपा दें ताकि वह बिना दिखाई दिए सुरक्षित रूप से शिप हो सके।
GitFlow (साधारण शब्दों में)
GitFlow आमतौर पर एक लॉन्ग-लाइव develop ब्रांच का उपयोग करता है जहाँ फीचर कार्य पहले उतरता है, और develop से फीचर ब्रांच बनती हैं। रिलीज़ के समय आप release/* ब्रांच काटते हैं टेस्टिंग और स्टेबिलाइजेशन के लिए। अगर प्रोडक्शन टूटता है, तो आप अक्सर main से hotfix/* ब्रांच काटते हैं और उसे वापस मर्ज करते हैं।
यह मॉडल अलगाव के लिए ऑप्टिमाइज़ करता है: ongoing work develop पर जारी रह सकती है जबकि रिलीज़ ब्रांच टेस्ट और पैच के लिए फोकस्ड रहती है।
कई दर्दनाक स्थितियाँ आम गलतफहमियों से आती हैं:
- ट्रंक-बेस्ड को "कोई ब्रांच नहीं" समझना (वास्तव में ब्रांच होती हैं, बस वे छोटे-लाइव होते हैं)।
- GitFlow का उपयोग करना पर कभी असली release ब्रांच न बनाना, जिससे
developअस्थिर स्टेजिंग क्षेत्र बन जाता है। - फीचर ब्रांच को हफ्तों तक रहने देना, जो किसी भी मॉडल को merge परेशानी में बदल देता है।
- "releasable" और "सब कुछ समाप्त" को ग़लत समझना—यहाँ मतलब है "सुरक्षित रूप से डिप्लॉय करने योग्य"।
Merge friction: असल में क्या कारण है
Merge conflicts आमतौर पर दो स्रोतों से आते हैं: ब्रांच जो बहुत लंबे समय तक रहती हैं, और एक से ज़्यादा लोग एक ही क्षेत्रों में बिना समन्वय के बदलाव करते हैं।
Trunk-based और GitFlow के बीच सबसे बड़ा व्यवहारिक अंतर यह है कि काम कितनी देर अलग रहता है उससे पहले वह दूसरों के काम से मिलता है।
Trunk-based में बदलाव अक्सर मुख्य लाइन पर आते हैं। Pull requests छोटे होते हैं, diffs छोटे होते हैं, और conflicts जल्दी दिख जाते हैं जब संदर्भ ताज़ा होता है। conflicts अभी भी होते हैं, पर वे आमतौर पर हल करने में आसान होते हैं क्योंकि आप कुछ लाइनों का ही मेल कर रहे होते हैं, न कि दो हफ्तों के ड्रिफ्ट का। ट्रेडऑफ़ अनुशासन है: बिल्ड को ग्रीन रखें, बदलावों को क्रमिक रखें, और main को प्रोडक्ट की तरह व्यवहार करें।
GitFlow में फीचर कार्य लंबा बैठ सकता है बिना दूसरे डेवलपर्स को रोज़ाना प्रभावित किए। लागत बाद में बड़े मर्ज इवेंट्स के रूप में दिखती है: फीचर → develop, develop → release/*, और release/* → main. हर मर्ज बड़ा होना चाहिए, इसलिए conflicts अधिक संभावित और उलझाने वाले होते हैं। साप्ताहिक शिपिंग के लिए, ये बड़े मर्ज अक्सर उसी समय आते हैं जब टीम टेस्ट कर रही होती है।
कोड रिव्यू का लोड भी बदल जाता है। ट्रंक-बेस्ड आमतौर पर अधिक रिव्यू करता है, पर हर रिव्यू जल्दी समझ में आता है। GitFlow में अक्सर कम लेकिन भारी रिव्यू होते हैं, साथ ही रिलीज़ मर्ज के दौरान अतिरिक्त थकावट भरे रिव्यू भी होते हैं।
किसी भी मॉडल में merge friction कम करने के उपाय:
- PRs को छोटा और फोकस्ड रखें (एक ही लक्ष्य पर)।
- रिस्की क्षेत्रों के लिए ownership तय करें (माइग्रेशन, साझा कॉन्फ़िग, कोर UI)।
- रोज़ाना upstream बदलाव खींचें ताकि आप ड्रिफ्ट न करें।
- अगर कोई फाइल हमेशा "हॉट" रहती है, तो उस पर पेयर करें बजाय अलग-अलग काम करके टकराने के।
अगर conflicts लगातार लगते हैं, तो आम तौर पर यह संकेत है कि आप बहुत देर से इंटीग्रेट कर रहे हैं, न कि कि Git समस्या है।
साप्ताहिक कॅडेंस के लिए रिलीज़ की अनुमाननीयता
अनुमाननीयता का मतलब तीन बातें हैं: आप जानते हैं कब रिलीज़ जाएगा, आप जानते हैं क्या उसमें है, और आप जानते हैं किन चेक्स को पास करना ज़रूरी है। टीमें आमतौर पर साप्ताहिक रिलीज़ मिस करती हैं क्योंकि वे स्कोप निर्णयों को आख़िरी समय के फिक्सिंग के साथ मिला देती हैं।
ट्रंक-बेस्ड में, साप्ताहिक रिलीज़ तब अनुमाननीय रहते हैं जब main ग्रीन रहे। आप छोटे बदलाव बार-बार मर्ज करते हैं और फीचर फ्लैग्स से स्कोप कंट्रोल करते हैं बजाय लंबे-जीवित ब्रांचों के। इससे साप्ताहिक ट्रेन चलता रहता है भले ही कोई फीचर पूरा न हुआ हो। कोड आ सकता है, पर यूज़र-फेसिंग व्यवहार तब तक बंद रहता है जब तक वह तैयार न हो।
क्वालिटी गेट अक्सर सरल होते हैं क्योंकि सत्यापन की एक जगह होती है:
- Automated tests
mainपर पास होने चाहिए। - QA एक स्थिर कैंडिडेट बिल्ड का परीक्षण करता है, न कि जो कुछ भी आखिरी घंटे में आया।
- रोलआउट और रोलबैक स्टेप लिखे हुए हों।
- एक स्पष्ट रिलीज़ कटऑफ़ समय हो (भले ही commits आते रहें)।
GitFlow में, रिलीज़ ब्रांच एक तरह का फ्रीज़ ज़ोन बनाकर अनुमाननीयता देती है। आप कटऑफ़ चुनते हैं, release/* बनाते हैं, और केवल शिप करने वाले बदलाव ही स्वीकार करते हैं। वह सीमा मदद करती है, पर यह समन्वय जोड़ती है क्योंकि फिक्स अक्सर कई जगह लागू करने पड़ते हैं (release और develop)।
अधूरा काम अलग तरह से संभाला जाता है:
- Trunk-based: सुरक्षित हिस्से मर्ज करें और बाकी को फीचर फ्लैग्स के पीछे रखें।
- GitFlow: अधूरा काम
developमें रहता है और रिलीज़ ब्रांच में शामिल नहीं किया जाता।
उदाहरण: अगर चेकआउट सुधार बुधवार तक आधे तैयार हों, तो ट्रंक-बेस्ड सुरक्षित रिफैक्टर्स मर्ज कर सकता है और नई UI को छुपा सकता है। GitFlow आमतौर पर उसे develop में रखेगा, शिप बिना उसे शामिल किएगा, और अगले साप्ताहिक रिलीज़ के लिए पूरा करेगा।
Hotfix फ्लो: प्रोडक्शन तक सबसे तेज़ सुरक्षित रास्ता
हॉटफिक्स सामान्य काम नहीं है। इसे गति, कम जोखिम और ऐसा रास्ता चाहिए जो बदलाव को टीम के काम के स्थान पर वापस लाए ताकि आप एक ही बग को दोबारा ठीक न करें।
पहला सवाल यह है: अभी प्रोडक्शन में कौन सा सटीक कोड चल रहा है? अगर आप सेकंड में इसका जवाब नहीं दे सकते, तो हॉटफिक्स अनुमान पर बनने लगते हैं।
ट्रंक-बेस्ड में हॉटफिक्स
ट्रंक-बेस्ड हॉटफिक्स सरल लग सकते हैं क्योंकि main को सत्य के स्रोत के रूप में माना जाता है।
आम फ्लो:
- प्रोडक्शन कमिट (आम तौर पर
main) से एक शॉर्ट-लिव्ड ब्रांच बनाएं। - सबसे छोटा संभव फिक्स करें (अगर हो सके तो टेस्ट जोड़ें)।
- जल्दी से वापस
mainमें मर्ज करें। mainसे डिप्लॉय करें और रिलीज़ टैग करें।
क्योंकि टीम अक्सर main में इंटीग्रेट करती है, हॉटफिक्स स्वाभाविक रूप से अगले साप्ताहिक रिलीज़ का हिस्सा बन जाता है। मुख्य जोखिम यह है कि main को releasable बनाए रखने वाला नियम टूट जाए अगर आधा-तैयार काम main में रह जाए। फीचर फ्लैग मदद करते हैं, पर उन्हें डिफ़ॉल्ट रूप से बंद रखें और हॉटफिक्स का सत्यापन बिना असंबंधित फीचर्स सक्षम किए करें।
GitFlow में हॉटफिक्स
GitFlow में हॉटफिक्स आम तौर पर main (प्रोडक्शन) से शुरू होते हैं, फिर उन्हें develop में भी मर्ज करना पड़ता है ताकि फिक्स खो न जाए।
एक सुरक्षित फ्लो:
mainके प्रोडक्शन टैग सेhotfix/*ब्रांच बनाएं।- फिक्स करें और रिलीज़ करें (या हॉटफिक्स ब्रांच से या
mainमें मर्ज के बाद)। - हॉटफिक्स को
mainमें और फिरdevelopमें मर्ज करें। - अगर
release/*मौजूद है, तो वहाँ भी मर्ज करें।
सबसे सामान्य विफलता उन मर्जों में से किसी को भूल जाना है। एक हफ्ते बाद, बग फिर "वापस" आ जाता है क्योंकि develop में पैच कभी नहीं गया।
एक सरल नियम अधिकतर समस्याओं को रोक देता है: हॉटफिक्स तब तक पूरा नहीं माना जाता जब तक वह हर लॉन्ग-लाइव ब्रांच में मर्ज न हो जिसका उपयोग भविष्य में शिपिंग के लिए होगा।
QA वातावरण कैसे स्थिर रखें (बिना टीम को रोकें)
साप्ताहिक शिपिंग तब टूटती है जब "QA" का मतलब होता है "जो कुछ भी अभी डिप्लॉय है"। अपने एनवायरनमेंट का नाम रखें और हर एक को एक काम दें: dev फास्ट फीडबैक के लिए, QA टीम टेस्टिंग के लिए, staging रिलीज़ चेक के लिए, prod कस्टमर्स के लिए। अगर आप किसी एनवायरनमेंट का उद्देश्य एक वाक्य में नहीं बता सकते, तो लोग उसे ग़लत इस्तेमाल करेंगे।
मूविंग टार्गेट रोकने वाले नियम
स्थिर QA ब्रांच मॉडल से ज़्यादा इस बात पर निर्भर करता है कि आप क्या डिप्लॉय करते हैं।
Trunk-based में, QA पर रैंडम commits न डिप्लॉय करें। एक पिन्ड कैंडिडेट (टैग्ड बिल्ड, बिल्ड नंबर, या शॉर्ट-लिव्ड release-candidate ब्रांच) डिप्लॉय करें जो हर बार वही चेक पास करे। QA के पास टेस्ट करने के लिए कुछ निश्चित रहे, भले ही विकास main पर जारी हो।
GitFlow में, QA आम तौर पर रिलीज़ ब्रांच को ट्रैक करता है। फंदा यह है कि रिलीज़ ब्रांच QA शुरू होने के बाद बदलती रहती है। एक बार QA शुरू हो जाए, रिलीज़ ब्रांच को एक कॉन्ट्रैक्ट की तरह इलाज करें: केवल मंज़ूर किए गए फिक्स ही स्वीकार करें और वह भी स्पष्ट प्रक्रिया के माध्यम से।
कुछ छोटे नियम किसी भी दृष्टिकोण को अनुमाननीय रखते हैं:
- QA में केवल पास होने वाले बिल्ड डिप्लॉय करें।
- डिप्लॉय किया गया वर्शन पिन करें (टैग, बिल्ड नंबर, या रिलीज़ ब्रांच हेड) और इसकी घोषणा करें।
- QA बदलावों को बग फिक्स तक सीमित रखें, नए फीचर्स नहीं।
- टेस्ट डेटा को शेड्यूल पर रीसेट करें और क्या मिटेगा यह डॉक्यूमेंट करें।
- कॉन्फ़िगरेशन को कोड के रूप में रखें ताकि एनवायरनमेंट ड्रिफ्ट कम हो।
यदि आपकी टीम AppMaster का उपयोग बिल्ड के कुछ हिस्सों के लिए करती है, तो वही सिद्धांत लागू होते हैं: QA के लिए एक विशिष्ट बिल्ड regenerate और deploy करें, न कि लगातार बदलते edits का सेट।
जब कई टीमें एक QA साझा करें
एक साझा QA वातावरण बॉटलनेक बन जाता है जब दो टीमें अलग-अलग वर्ज़न चाहती हैं। अगर आप अलग QA वातावरण का खर्च वहन नहीं कर सकते, तो एक हल्का reservation नियम जोड़ें: एक टीम एक टाइम-विंडो के लिए QA की मालिक होती है, और बाकी लोग dev या staging का उपयोग करते हैं। फीचर फ्लैग्स भी मदद करते हैं क्योंकि अधूरा काम डिप्लॉय तो किया जा सकता है पर टेस्टर्स के लिए दिखाई नहीं देगा।
उदाहरण: टीम A साप्ताहिक रिलीज़ कैंडिडेट का वैलिडेशन कर रही है, इसलिए QA बिल्ड 1842 पर पिन रहती है साइन-ऑफ तक। टीम B फिक्स मर्ज कर सकती है, पर वे अगले कैंडिडेट तक इंतज़ार करेंगे बजाय यह कि QA को मिड-साइकिल बदल दें।
चरण-दर-चरण: एक ऐसा वर्कफ़्लो चुनें जिसका आपका टीम हर हफ्ते पालन कर सके
लिखिए कि "साप्ताहिक शिपिंग" आपके लिए क्या मतलब रखती है। एक रिलीज़ दिन और समय चुनें, तय करें कि किस स्तर का जोखिम स्वीकार्य है (उदाहरण: "कोई ज्ञात P1 बग नहीं"), और टीम का आकार व टाइमज़ोन नोट करें। इससे ब्रांच बहसें प्राथमिकता बहस में नहीं बदलेंगी।
एक बेस मॉडल चुनें और एक महीने के लिए उस पर कायम रहें। शुरुआत में मॉडल को मिक्स मत करें। मिक्स करने से अक्सर नियम बढ़ जाते हैं पर सरप्राइज़ कम नहीं होते।
एक सरल साप्ताहिक वर्कफ़्लो जिसे आप अनुकूलित कर सकते हैं:
- ब्रांच की उम्र छोटी रखें (घंटे से 1-2 दिन) और कम से कम रोज़ाना मर्ज करें।
- सुरक्षा रेल जोड़ें: तेज़ CI, एक छोटा आवश्यक रिव्यू, और कुछ ऑटोमेटेड टेस्ट जो असली ब्रेकेज़ पकड़ते हों।
- तय करें कि आप स्कोप कैसे काबू में रखेंगे: फीचर फ्लैग्स, सप्ताह के अंत के पास एक शॉर्ट-लिव्ड रिलीज़ ब्रांच, या सटीक रिलीज़ कमिट के लिए टैग।
- हॉटफिक्स कदम परिभाषित करें: कौन ट्रिगर कर सकता है, कौन से चेक आवश्यक हैं, और फिक्स कैसे मुख्य लाइन में वापस आएगा।
- QA को स्थिर रखें: तय करें QA किसे ट्रैक करे (release ब्रांच या पिन्ड कैंडिडेट) और टेस्ट के बीच इसे मिड-चेंज न करें जब तक आप टेस्ट साइकिल रीस्टार्ट न कर दें।
एक पेज पर न्यूनतम वर्कफ़्लो लिखिए। यह इतना छोटा होना चाहिए कि नया सदस्य बिना मीटिंग के पालन कर सके। यह और भी महत्वपूर्ण है अगर टीम का कुछ हिस्सा विज़ुअली (उदा. AppMaster) काम करता है और बाकी कोड में, क्योंकि हैंडऑफ तब फेल होते हैं जब नियम सिर्फ किसी के सिर में रहते हैं।
उदाहरण: दोनों मॉडलों में एक वास्तविक साप्ताहिक रिलीज़
कल्पना कीजिए एक 6-व्यक्ति प्रोडक्ट टीम जो हर शुक्रवार शिप करती है। दो QA टेस्टर्स एक स्टेजिंग वातावरण साझा करते हैं, तो अगर स्टेजिंग अस्थिर है तो टेस्टिंग सबके लिए रुक जाती है।
GitFlow के साथ एक व्यस्त सप्ताह
सोमवार: तीन डेवलपर्स फीचर्स खत्म कर के develop में पुल रिक्वेस्ट खोलते हैं। QA develop से बने स्टेजिंग का परीक्षण शुरू कर देता है।
बुधवार: टीम release/1.8 काटती है ताकि शुक्रवार की शिप सुरक्षित रहे। नया काम develop में आता रहता है पर QA अब रिलीज़ बिल्ड पर फोकस करता है।
गुरुवार दोपहर: एक लेट बग दिखता है। फिक्स पहले release/1.8 में आता है ताकि QA जल्दी रेटेस्ट कर सके। फिर कोई व्यक्ति वह फिक्स develop में मर्ज करता है—यहीं पर अक्सर गलतियाँ होती हैं।
आम लय:
- सोम-मंगल: फीचर
developमें मर्ज होते हैं, स्टेजिंग अक्सर बदलता है। - बुध:
release/1.8बनाएं, स्टेजिंग रिलीज़ बिल्ड पर स्विच हो जाती है। - गुरु:
release/1.8में बग फिक्स, फिरdevelopमें मर्ज। - शुक्र:
release/1.8कोmainमें मर्ज करें, टैग करें और डिप्लॉय करें।
उसी सप्ताह का ट्रंक-बेस्ड संस्करण
सप्ताह छोटे, बार-बार मर्ज के इर्दगिर्द बना रहता है। फीचर फ्लैग्स के पीछे शिप होते हैं ताकि अधूरा काम मर्ज तो हो सके पर यूज़र्स को दिखे न।
सोमवार से गुरुवार: डेवलपर्स छोटे बदलाव रोज़ाना main में मर्ज करते हैं। QA एक पिन्ड कैंडिडेट बिल्ड का परीक्षण करता है।
मंगलवार: प्रोडक्शन में समस्या आती है। हॉटफिक्स main से शॉर्ट ब्रांच पर बनती है, रिव्यू के बाद तुरंत मर्ज होकर प्रमोट हो जाती है। क्योंकि main सत्य का स्रोत है, अतिरिक्त बैक-मेर्ज की ज़रूरत नहीं रहती।
किसी भी तरह, टीम को स्पष्ट प्रमोशन नियम चाहिए:
- स्टेजिंग लेटेस्ट पिन्ड कैंडिडेट चलाए, हर नए commit पर नहीं।
- QA नया कैंडिडेट तभी माँगता है जब वह तैयार हो, स्वरूप से नहीं।
- सिर्फ़ शुक्रवार की रिलीज़ के लिए फिक्स कैंडिडेट बदल सकते हैं।
- बाकी सब कुछ फ्लैग्स के पीछे या अगले कैंडिडेट तक रुके रहे।
ऐसी सामान्य गलतियाँ जो चक्र और अस्थिर QA बनाती हैं
अधिकतर टीमें इसलिए फेल नहीं होती कि उन्होंने "गलत" मॉडल चुना। वे इसलिए फेल होती हैं क्योंकि रोज़मर्रा की आदतें मॉडल से मेल नहीं खातीं, तो QA शोरगुली हो जाता है और रिलीज़ रैंडम लगने लगते हैं।
एक आम समस्या ब्रांचों को दिनो तक बैठने देना है क्योंकि "यह तैयार नहीं है"। कोड main से ड्रिफ्ट कर जाता है, conflicts जमा हो जाते हैं, और QA को मिलकर ऐसा मिश्रण टेस्ट करना पड़ता है जिसे कोई दोबारा बनाकर रिप्रोड्यूस नहीं कर पाता।
एक और समस्या GitFlow का उपयोग करने पर असली फ्रीज़ न रखना है। रिलीज़ ब्रांच को स्टेबिलाइज़ करना चाहिए, पर टीमें "बस एक और" बदलाव चपका देती हैं। इससे रिलीज़ ब्रांच एक दूसरा मुख्य लाइन बन जाता है और कोई नहीं जानता कि QA किस चीज़ की पुष्टि कर रहा है।
QA तब भी अस्थिर हो जाता है जब उसे अधूरा बिल्ड का डम्प समझ लिया जाता है। अगर हर commit बिना नियम के QA में जाता है, तो टेस्टर्स मूविंग टार्गेट का पीछा करेंगे बजाय रिलीज़ को वैलिडेट करने के।
सबसे ज़्यादा churn पैदा करने वाली गलतियाँ:
- लंबे समय तक रहने वाली फीचर ब्रांच जो देर से मर्ज होकर अनसंबंधित काम तोड़ देती हैं।
- रिलीज़ ब्रांच जो नए फीचर अब भी स्वीकार कर रही हों।
- प्रमोशन पाथ न होना, तो QA ने जो टेस्ट किया वह शिप नहीं होता।
- हॉटफिक्स जल्दी में किए जाते हैं और फिर सब जगह मर्ज नहीं होते।
- ऐसे एनवायरनमेंट जिनका कोई मालिक नहीं, कोई उद्देश्य नहीं, और कोई रीसेट प्लान नहीं।
एक नियम सेट रखें जिसे हर कोई दोहरा सके:
- QA केवल पिन्ड कैंडिडेट टेस्ट करे।
- आप वही आर्टिफैक्ट QA से प्रोडक्शन में प्रमोट करें।
- हर एनवायरनमेंट का एक मालिक और रीसेट कैडेंस हो।
- हॉटफिक्स उसी दिन मुख्य लाइन में वापस आ जाएं।
त्वरित चेकलिस्ट: बिना सरप्राइज़ के साप्ताहिक शिपिंग
साप्ताहिक शिपिंग तब काम करती है जब आपकी टीम कुछ बोरिंग सवालों का आत्मविश्वास से जवाब दे सकती है। अगर आप दो या अधिक का जवाब "नहीं" देते हैं, तो देर से फिक्स और QA झटके की उम्मीद रखें।
- क्या एक ऐसी ब्रांच है जिसे आप आज सुरक्षित रूप से डिप्लॉय कर सकते हैं? इसे बिल्ड होना चाहिए, स्मोक टेस्ट पास करने चाहिए, और आधा-तैयार बदलावों से मुक्त होना चाहिए।
- क्या पुल रिक्वेस्ट छोटे रहते हैं और एक-दो दिन में लैंड हो जाते हैं? लंबे PR आमतौर पर स्टेल फीडबैक और बड़े conflicts का कारण होते हैं।
- क्या QA एक फिक्स्ड बिल्ड टेस्ट करता है, न कि मूविंग टार्गेट? QA को एक निश्चित बिल्ड नंबर या रिलीज़ कैंडिडेट validate करना चाहिए।
- क्या आप बिना ड्रामे के अधूरा काम रिलीज़ से बाहर रख सकते हैं? फीचर फ्लैग्स, कॉन्फ़िग टॉगल, या स्पष्ट स्कोप-कट नियम।
- क्या कोई हॉटफिक्स और रोलबैक बिना अनुमान के रन कर सकता है? एक छोटा रनबुक टीम ज्ञान से बेहतर है।
अगर आप एक मापनीय लक्ष्य चाहते हैं: QA को एक रिलीज़ कैंडिडेट पर पिन करें और उस कैंडिडेट को जानबूझकर फिक्स के अलावा न बदलें।
अगले कदम: अगले सप्ताह एक बदलाव आज़माएँ
अगर आपकी टीम ट्रंक-बेस्ड बनाम GitFlow पर बहस में अटकी है, तो सब कुछ एक साथ नया न डिज़ाइन करें। उस समस्या को चुनें जो सबसे ज़्यादा समय बर्बाद कर रही है और अगले रिलीज़ के लिए एक छोटा प्रयोग चलाएँ।
अगर merge conflicts सबसे बड़ी परेशानी हैं, तो तुरंत ब्रांच लाइफटाइम छोटी करें। रोज़ाना (या हर दूसरे दिन) लैंड करने का लक्ष्य रखें, और आवश्यकता पड़ने पर फीचर फ्लैग्स का उपयोग करें।
अगर QA अस्थिरता सबसे बड़ा दर्द है, तो पहले QA को पिन करना और एक सरल प्रमोशन स्टेप परिभाषित करना शुरू करें।
एक हल्का पायलट:
- एक रेपो और एक टीम चुनें।
- एक ब्रांच उम्र सीमा सेट करें (उदा. कोई ब्रांच 2 दिनों से पुरानी न हो)।
- QA को एक बिल्ड पर पिन करें और केवल स्पष्ट प्रमोशन के जरिये उसे बदलें।
- तीन नंबर ट्रैक करें: merge-resolution समय, QA rework घंटे, और hotfix time-to-production।
- 2–4 हफ्तों के बाद समीक्षा करें और समायोजित करें।
अगर आप आंतरिक टूल या कस्टमर पोर्टल्स के लिए रिलीज़ दबाव कम करना चाहते हैं, तो AppMaster जैसे नो-कोड प्लेटफ़ॉर्म भी मदद कर सकते हैं जो विज़ुअल डिजाइन से प्रोडक्शन-रेडी बैकएंड, वेब और नेटिव मोबाइल ऐप जनरेट करते हैं। फिर भी ऊपर बताए आदतों से लाभ मिलता है: छोटे बदलाव, पिन्ड QA कैंडिडेट, और स्पष्ट प्रमोशन पाथ।
सामान्य प्रश्न
ट्रंक-बेस्ड डेवलपमेंट आम तौर पर साप्ताहिक शिपिंग के लिए बेहतर बैठता है क्योंकि यह आपको छोटे, बार-बार मर्ज करने की ओर ढकेलता है और main को रिलीज़ेबल बनाए रखता है। GitFlow भी काम कर सकता है, लेकिन अक्सर यह बड़े मर्ज की घटनाएँ जोड़ता है जो उस समय आती हैं जब आप टेस्टिंग और स्टेबिलाइजेशन कर रहे होते हैं।
साधारण शब्दों में: ट्रंक-बेस्ड में अधिकांश काम जल्दी main में वापस मर्ज होता है और ब्रांच छोटे होते हैं। GitFlow में लंबे समय तक रहने वाली ब्रांचें जैसे develop और release/* होती हैं, इसलिए इंटीग्रेशन के चरण अधिक होते हैं।
अक्सर मिलने वाला कारण बार-बार इंटीग्रेशन है: छोटे PR, छोटे diff, और कन्फ्लिक्ट्स जल्दी दिखते हैं जबकि संदर्भ ताज़ा होता है। इसके लिए अनुशासन चाहिए—भरोसेमंद CI और क्रमिक बदलाव ताकि main हमेशा ग्रिन रहे।
लॉन्ग-लाइव फीचर और रिलीज़ ब्रांचों की वजह से कोड ड्रिफ्ट होता है, और फिर उन बदलावों का बड़ा समन्वय बनता है: फीचर → develop, develop → release/*, और फिर release/* → main. यह साप्ताहिक शिपिंग के लिए कष्टप्रद होता है क्योंकि ये मर्ज अक्सर स्टेबिलाइजेशन विंडो के दौरान होते हैं।
PR छोटे रखें, रोज़ाना मर्ज करें, और रेगुलरली अपस्ट्रीम बदलाओं को खींचें ताकि ड्रिफ्ट न हो। यदि कोई फाइल बार-बार बदली जा रही है, तो उस पर स्वामित्व तय करें या पेयर प्रोग्रामिंग करें बजाय अलग-अलग काम करके टकराने के।
QA को एक निश्चित कैंडिडेट बिल्ड पर पिन करें और उसे मिड-टेस्ट बदलें नहीं जब तक आप जानबूझकर नया टेस्ट साइकिल शुरू न करें। इस तरह QA मूविंग टार्गेट का पीछा नहीं करेगा और बग रिपोर्ट्स पुनरुत्पादनयोग्य बने रहेंगे क्योंकि सबको पता होगा कौन सा बिल्ड टेस्ट हो रहा है।
फीचर फ्लैग्स (या समकक्ष टॉगल) का प्रयोग करें ताकि कोड मर्ज हो सके बिना अधूरा व्यवहार यूज़र्स के सामने लाए। डिफ़ॉल्ट रूप से नया व्यवहार बंद रखें और जब वह पूरा व सत्यापित हो जाए तब ऑन करें—इससे साप्ताहिक रिलीज़ पटरी पर बनी रहती है।
ठीक उसी प्रोडक्शन कमिट से ब्रांच बनाएं, सबसे छोटा संभव फ़िक्स करें, भरोसेमंद चेक चलाएँ और जल्दी डिप्लॉय करें। फिर तुरंत उस फिक्स को हर लॉन्ग-लाइव ब्रांच में मर्ज करें जो फिर से शिप होने वाली है ताकि बग अगले हफ्ते वापस न आए।
ट्रंक-बेस्ड में सामान्य गलती यह है कि आधा-तैयार काम main में रह जाता है जिससे main रिलीज़ेबल नहीं रहता — इसलिए फ्लैग्स का ठीक से उपयोग जरूरी है। GitFlow में सामान्य गलती यह है कि हॉटफिक्स को develop (और कभी-कभी release/*) में वापस मर्ज करना भूल जाना, जिससे बग फिर से दिखाई देता है।
हाँ। बस AppMaster से बने आउटपुट को किसी भी अन्य बिल्ड आर्टिफैक्ट की तरह ही ट्रिट करें: QA को पिन्ड बिल्ड दें, वही आर्टिफैक्ट प्रमोट करें प्रोडक्शन की ओर, और याद रखें कि इन-प्रोग्रेस बदलावों को यादृच्छिक रूप से डिप्लॉय न करें। क्या कब regenerate और deploy करना है, इसकी साफ़ नीतियाँ रखें।


