हॉटफिक्सेस को संभालते हुए कई सक्रिय रिलीज़ के लिए उपयुक्त गिट वर्कफ़्लो


30

मैं एक Git वर्कफ़्लो चुनने की कोशिश कर रहा हूं जो हमारे उत्पाद के लिए सबसे उपयुक्त है। यहाँ पैरामीटर हैं:

  • हम एक साल में कुछ प्रमुख रिलीज करते हैं, चलो 10 को सबसे ज्यादा कहते हैं
  • हमारे पास एक ही समय में हमारे उत्पाद के कई संस्करण सक्रिय हैं (कुछ लोग v10.1 पर हैं, कुछ v11.2 पर हैं, आदि)
  • हमें एक ही समय में कई रिलीज पर काम करने में सक्षम होना चाहिए (इसलिए हम v12.1 पर काम कर सकते हैं, लेकिन जैसे-जैसे हम रिलीज के अंत में आते हैं, हम उसी समय v12.2 पर काम करना शुरू कर देते हैं)
  • महत्वपूर्ण कीड़े पाए जाने पर हमें रिलीज़ रिलीज़ करने में सक्षम होना चाहिए

अब तक, यहां मुझे लगता है कि यह काम कर सकता है:

  • सिंगल रिमोट रेपो का उपयोग किया जाता है
  • मास्टर से शाखा 12.1 बनाएँ
  • 12.1 के आधार पर सुविधा शाखाएं बनाएं, उन्हें कमिट करें और 12.1 में वापस मर्ज करें, पुश करें
  • एक बार जब हमें भविष्य की रिलीज़ पर काम करना शुरू करना है, तो 12.1 के आधार पर एक नई शाखा 12.2 बनाएं
  • तब से, 12.1 के लिए एक सुविधा पर काम करते समय, 12.1 से शाखा बनाएं, परिवर्तन करें, और 12.1 और 12.2 दोनों में विलय करें, पुश करें
  • यदि 12.2 के लिए एक सुविधा पर काम कर रहे हैं, तो 12.2 से शाखा बनाएं, परिवर्तन करें, और केवल 12.2 में विलय करें, धक्का दें
  • जब रिलीज़ 12.1 पूरा हो जाता है, तो इसे मास्टर में जोड़ें और 12.1 के साथ मास्टर शाखा को टैग करें
  • यदि किसी हॉटफ़िक्स की आवश्यकता है, तो सबसे पुरानी रिलीज़ ब्रांच से एक हॉटफ़िक्स ब्रांच बनाएं जिसकी उसे ज़रूरत हो, उसमें बदलाव करें और उस रिलीज़ के लिए सभी रिलीज़ ब्रांचों में विलय कर दें और भविष्य में रिलीज़ होने वाली ब्रांच प्रभावित हो सकती है; यदि नवीनतम स्थिर रिलीज़ शाखा प्रभावित हुई, तो इसे मास्टर में मर्ज कर दें।

मुझे कुछ चिंताएँ हैं:

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

टिप्पणियों को उन चीजों पर सराहना की जाती है जिन्हें मैंने अनदेखा किया है या जिन चीजों को मैंने निर्दिष्ट किया है, उन्हें पूरा करने के बेहतर तरीके।



11
मुझे git-flow के बारे में पता है, लेकिन मैं यह नहीं देखता कि यह कई सिमुलैटिक रिलीज़ पर कैसे काम करता है। लगता है कि रिलीज शाखाओं की तरह वास्तव में कोई भी काम करने के लिए नहीं किया जाता है, ज्यादातर सफाई और फिर मर्ज और टैग करने के लिए। जब मेरे पास 4 भिन्न रिलीज़ संस्करणों को प्रभावित करने वाला एक हॉटफ़िक्स है तो मैं क्या करूँ? मुझे लगता है कि मैं मास्टर से टैग की गई रिलीज़ को चेकआउट कर सकता हूं, लेकिन एक बार जब मैंने इसे ठीक कर लिया है, तो उस विशेष रिलीज के लिए मैंने मास्टर में जो भी सुधार किए हैं, मैं उन्हें फिर से कैसे काम करूंगा। लगता है जैसे यह मुश्किल होगा।
रॉकेट 04

यदि आपको एक ही फिक्स के साथ कई रिलीज को गर्म करने की आवश्यकता है, तो आपको संभवतः सबसे पुराना संस्करण पहले से ठीक करना चाहिए और प्रत्येक रिलीज के लिए फिट होने के लिए नया, विलय करना चाहिए। यदि आप नए से पुराने काम करते हैं तो आप बाद में रिलीज से निर्भरता को कम करने का जोखिम उठाते हैं जो चीजों को जटिल करेगा।
axl

और जैसा कि मैंने अपने प्रस्तावित उत्तर में उल्लेख किया है, मास्टर शाखा कई लाइव रिलीज़ के साथ इतनी अच्छी तरह से काम नहीं करती है, इसलिए जब तक आपको वास्तव में किसी कारण से इसकी आवश्यकता नहीं होती है, मैं आपको सलाह देता हूं कि इसका उपयोग न करें।
एक्सल

जवाबों:


9

आप हर बड़ी रिलीज़ (12.0.0) पर बंद होने लगते हैं, फिर प्रत्येक (12.1.0), और हॉट फ़िक्स (12.2.1) में मामूली अपडेट हो सकते हैं। सही बात?

कोई विशेष कारण नहीं है कि आप रिलीज़ होने के बाद GitFlow में रिलीज़ शाखाओं को जीवित नहीं रख सकते, इस तथ्य के अलावा कि किसी भी मॉडल के साथ लंबे समय तक कई डाइवर्जिंग शाखाओं के बीच परिवर्तनों का समन्वय करना कठिन है। मुझे लगता है कि GitFlow को उन उत्पादों के लिए और अधिक मॉडल बनाया गया था जो अगले विकास के दौरान एक ही लाइव रिलीज बनाए रखते हैं।

मैं GitFlow के साथ रहना और कुछ संशोधन करना चाहूंगा;

गुरु शाखा छोड़ें। मैंने अब तक इसका कोई व्यावहारिक उपयोग नहीं किया है, और यह आपके काम करने के तरीके से अपनी रैखिकता खो देगा। विकास पर अगली प्रमुख रिलीज पर विकास रखें। यदि आप मास्टर रखने का निर्णय लेते हैं, तो मास्टर पर रिलीज़ टैग न डालें, उन्हें रिलीज़ शाखा पर अंतिम प्रतिबद्ध पर रखें जो कि आपके द्वारा बाइनरी शिपिंग किए गए थे।

आप उन्हें वापस विकसित करने के लिए मर्ज करने के बाद रिलीज़ शाखाओं को फेंक न दें। इसके बजाय उन्हें अगले छोटे रिलीज और संभव हॉट ​​फ़िक्स के लिए चारों ओर रखें। यदि आप कभी भी किसी रिलीज़ का समर्थन करना बंद कर देते हैं, तो मुझे लगता है कि उन्हें हटाना ठीक है। आप उनके मुख्य घटक, रिलीज़ / 12 के बाद रिलीज़ शाखाएँ नाम दे सकते हैं, और फिर उप-रिलीज़ शाखाएँ बना सकते हैं, रिलीज़ / 12.1, रिलीज़ / 12.2 इसे बंद कर सकते हैं। मुझे समानता के इस स्तर के बारे में बहुत अधिक चिंता करने की ज़रूरत नहीं है, लेकिन शायद यही मैं कोशिश करूँगा। आप इस मामले में प्रत्येक प्रमुख रिलीज शाखा को अपना उप-गिटफ्लो वातावरण मान सकते हैं।

यदि आप एक ही समय में कई भविष्य की प्रमुख रिलीज़ के लिए सुविधाओं पर समानांतर में काम कर रहे हैं, तो शायद आपको अगले एक (13) को विकसित करना होगा और बाद के संस्करणों के लिए कुछ भी (14, 15) अतिरिक्त "डेवलप-एन" शाखाओं पर रखना होगा। । यह सामान्य रूप से बनाए रखने के लिए बहुत कठिन लगता है, लेकिन यह संभव होगा।


3

ऐसा लगता है कि आपकी मुख्य समस्या के लिए एक संभावित समाधान ( «हमें एक ही समय में कई रिलीज पर काम करने में सक्षम होना चाहिए [...]» ) डूइंग एgit worktree add <path> [<branch>]

एक गिट रिपॉजिटरी कई कार्यशील पेड़ों का समर्थन कर सकती है , जिससे आप एक बार में एक से अधिक शाखाएं देख सकते हैं।
के साथ git worktree add, एक नया काम करने वाला पेड़ भंडार के साथ जुड़ा हुआ है।

इस नए काम करने वाले पेड़ को " git init" या " git clone" द्वारा तैयार किए गए "मुख्य काम करने वाले पेड़" के विपरीत "लिंकिंग वर्किंग ट्री" कहा जाता है
एक रिपॉजिटरी में एक मुख्य कार्यशील पेड़ होता है (यदि यह एक नंगे रिपॉजिटरी नहीं है) और शून्य या अधिक लिंक्ड वर्किंग ट्री हैं।

विस्तृत परिचय के लिए इस SO उत्तर को देखें git worktree


1

आपने उल्लेख किया कि आप gitflow से परिचित हैं। मैं आपके परिदृश्य के लिए इसे अपनाने का सुझाव देता हूं। पुराने संस्करणों का समर्थन करने के लिए आपको अपनी विकास शाखा से शाखाएँ बनाने की आवश्यकता होगी। इन पुराने संस्करणों के लिए अपनी रिलीज़ / मास्टर शाखाओं और हॉटफ़िक्स शाखाओं की भी आवश्यकता होगी। आपको समय-समय पर अपनी समर्थन शाखाओं को नए समर्थन शाखाओं और विकसित शाखा में विलय करने की आवश्यकता होगी।

प्रमुख संस्करणों के विकास के रूप में यह कठिन होता जा रहा है। इसके लिए चांदी की गोली नहीं है। कभी-कभी मैन्युअल रूप से परिवर्तन करना आसान होगा। पुराने संस्करणों को बनाए रखने की लागत में वृद्धि होगी, और कुछ बिंदु पर यह अब इसके लायक नहीं होगा।

यह सब निर्भर करता है कि आप अपने पुराने संस्करणों में किस तरह के बदलाव कर रहे हैं। यदि केवल बगफिक्सिंग, तो मर्ज करना अपेक्षाकृत आसान है। यदि आप नई सुविधाओं को जोड़ने का प्रयास करते हैं, तो यह कठिन होगा।


लेकिन जैसा कि मैंने उल्लेख किया है, git-flow के मामले में ऐसा नहीं लगता है कि वे रिलीज शाखाओं का उपयोग बहुत अधिक करते हैं। ऐसा नहीं लगता कि वहां कोई बड़ा विकास हो रहा है। ऐसा भी लगता है कि विकसित शाखा बेकार है अगर हम ज्यादातर रिलीज शाखाओं में काम कर रहे हैं, तो इससे छुटकारा मिल सकता है, प्रत्येक रिलीज शाखा अनिवार्य रूप से एक निश्चित अवधि के लिए विकसित शाखा है। या क्या मैं कुछ न कुछ भूल रहा हूं?
रॉकेट 0 4
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.