में रिलीज से फीचर्स को हटाकर मैं एक बड़े जावा कोड बेस (300k + कोड की लाइन) के साथ एक टीम पर काम करता हूं, जिसने हाल ही में गिट को स्रोत नियंत्रण (क्लीयरकेस से माइग्रेट किया) के रूप में अपनाया है। हम अपनी शाखा रणनीति के रूप में Git Flow का उपयोग कर रहे हैं। कुछ उपयोग मामले हैं जो हम काफी बार आते हैं जिनके साथ हम संघर्ष कर रहे हैं।गिट फ्लो
हम विकसित शाखा में हमारे सभी सुविधाओं का विलय कर दिया है आने वाली रिलीज़ में प्रयोग की जाने वाली। जब हम रिलीज के करीब आते हैं, तो यह पता चला कि एक सुविधा लाइव नहीं जा सकती है (या तो क्लाइंट के तैयार होने के कारण, या किसी अन्य कारण से)। रिलीज शाखा बनाने का सबसे अच्छा तरीका क्या है, लेकिन एक विशिष्ट सुविधा (कई प्रतिबद्धताओं में) छोड़ दें? अगले भविष्य में रिलीज में शामिल होने के लिए सुविधा उपलब्ध होनी चाहिए। हमने पहले जो कोशिश की है वह सभी कामों पर "गिट रिवर्ट" करना है, रिलीज शाखा बनाएं, फिर वापस आने वाले कामों पर "गिट रिवर्ट" करें। यह विशेष रूप से बड़ी सुविधाओं के लिए एक सुंदर दर्दनाक दृष्टिकोण है।
हमने पहले ही रिलीज शाखा बनाई है, लेकिन रिलीज लाइव होने से पहले, यह निर्धारित किया जाता है कि एक सुविधा को हटाने की जरूरत है। पहले उपयोग के मामले के समान, इस सुविधा को निम्नलिखित रिलीज में जाने में सक्षम होना चाहिए। इस वजह से, काम करने पर बस "गिट रिवर्ट" करना पूरी तरह से हल नहीं होता है, क्योंकि जब हम "गिट फ्लो रिलीज फिनिश" करते हैं तो रिवर्ट्स विकास शाखा में वापस आ जाएंगे।
जैसा कि गिट फ्लो मॉडल में उल्लिखित है, सभी काम फीचर शाखाओं पर किए जाते हैं, और सीधे विकास शाखा पर नहीं होते हैं। जब कोई सुविधा पूरी हो जाती है और अगली रिलीज के लिए तैयार होती है, तो इसे विकसित करने के लिए विलय कर दिया जाता है। जब अगली रिलीज के लिए समय हो, तो रिलीज शाखा विकसित होने से बनाई गई है। रिहाई के बाद रिग्रेशन का परीक्षण किया गया है और आवश्यक होने पर तय किया गया है, यह उत्पादन में जाता है और मास्टर को विलय कर दिया जाता है, और बग फिक्स के मामले में विकसित होने के लिए, और संस्करण संख्या के साथ टैग किया जाता है। उपर्युक्त समस्याएं तब आती हैं जब एक फीचर जिसे हमने सोचा था कि अगली रिलीज में जा रहा है, उसे छोड़ने की जरूरत है।
इन स्थितियों को संभालने के लिए सबसे अच्छी विधियां क्या हैं? इन दोनों परिदृश्यों में, शाखाओं को कई डेवलपर्स द्वारा प्रकाशित और खींचा गया है, इसलिए इतिहास के साथ गड़बड़ी कठिनाइयों को पैदा कर सकती है। मुझे पता है कि ये आदर्श से कम हैं, लेकिन दुर्भाग्यवश स्थितियां हमारे नियंत्रण से बाहर हैं।
आप सीधे * विकास * पर आने से बच सकते हैं और अंतिम रिलीज से शुरू होने वाली रिलीज शाखा बना सकते हैं। तो आप नई रिलीज में शामिल सुविधाओं को चुनिंदा रूप से मर्ज कर सकते हैं। –
@AndrewC मैंने कुछ अतिरिक्त जानकारी के साथ अपना प्रश्न अपडेट कर लिया है। – NickForrer
@Zeeker कोई काम सीधे विकास शाखा पर नहीं किया जाता है। वे एक फीचर शाखा से विलय कर रहे हैं। अगर हम विकास के बजाय रिलीज करने के लिए सुविधाओं को मर्ज करते हैं, तो यह अभी भी दूसरे उपयोग के मामले को संबोधित नहीं करता है। – NickForrer