GitFlow का उपयोग करके किसी अन्य शाखा से विलय करने के लिए कोड पर प्रतीक्षा करके डेवलपर्स को अवरुद्ध किया गया


17

हमारी टीम ने फोगबगज़ और किल / मर्क्यूरियल से जीरा और स्टैश / गिट से स्विच बनाया। हम शाखा शाखाओं के लिए गिट फ्लो मॉडल का उपयोग कर रहे हैं, सुविधा शाखाओं की उपखंड शाखाओं (जीरा सुविधाओं के जीरा उपशीर्षक) से जोड़ रहे हैं। जब हम मूल शाखा में वापस विलय करने के लिए एक पुल अनुरोध बनाते हैं (आमतौर पर विकसित होते हैं, लेकिन सुविधा शाखा में वापस उप-लिंक के लिए), तो हम एक समीक्षक को नियुक्त करने के लिए Stash का उपयोग कर रहे हैं।

हम जो समस्या खोज रहे हैं, वह यह है कि फीचर मामलों के बेहतरीन नियोजन और टूटने के साथ भी, जब कई डेवलपर्स एक ही फीचर पर एक साथ काम कर रहे हैं, तो सामने के छोर और बैक-एंड पर कहें, अगर वे अन्योन्याश्रित कोड पर काम कर रहे हैं अलग-अलग शाखाओं में एक डेवलपर दूसरे को अवरुद्ध करता है।

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

मुझे पता है कि यह जरूरी नहीं है कि एक Git मुद्दा है - इसे कई शाखाओं में अन्योन्याश्रित कोड पर काम करने के साथ करना है, हमारी अपनी कार्य प्रक्रिया और संस्कृति के साथ। अगर हमारे पास डेवलपमेंट (ट्रू इंटीग्रेशन ब्रांच) के लिए सख्त कोड-समीक्षा नीति नहीं थी, तो डेवलपर 1 को खींचने के लिए डेवलपर 2 के लिए विकसित करने के लिए मर्ज हो सकता है। एक और जटिलता यह है कि हमें QA.T सुविधा को बंद करने से पहले कोड की समीक्षा प्रक्रिया के हिस्से के रूप में कुछ प्रारंभिक परीक्षण करने की भी आवश्यकता है। इसका मतलब है कि भले ही फ्रंट-एंड डेवलपर 1 बैक-एंड डेवलपर 2 की शाखा से सीधे खींच रहा हो क्योंकि वे जाओ, यदि बैक-एंड डेवलपर 2 खत्म हो गया है और उसका / उसकी पुल अनुरोध एक सप्ताह के लिए कोड समीक्षा में बैठा है, तो फ्रंट-एंड डेवलपर 2 तकनीकी रूप से अपना पुल अनुरोध / कोड समीक्षा नहीं बना सकता है क्योंकि उसका / उसके कोड समीक्षक नहीं कर सकते हैं परीक्षण क्योंकि बैक-एंड डेवलपर 2 '

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

अंतिम बात जिसका हम उल्लेख करते हैं, हमें उन शाखाओं के कोड साझा करने का एहसास होता है, जिनकी कोड समीक्षा नहीं की गई है और अंतिम रूप से अभी तक हम दूसरों के बीटा कोड का उपयोग कर रहे हैं। एक निश्चित सीमा तक मुझे नहीं लगता कि हम इससे बच सकते हैं और इसे एक हद तक स्वीकार करने को तैयार हैं।


बस सत्यापन - कार्य की विशेषता पर मर्ज करने के लिए कोड की समीक्षा की जा रही है? और विकसित करने के लिए सुविधा मर्ज पर कोई कोड समीक्षा नहीं है?

निर्भर करता है। हमारे पास अंगूठे का एक नियम है कि कोई भी जीरा मामला जो एक शाखा से मेल नहीं खाता है, हम सीधे कोड की जांच करते हैं और जो पदानुक्रम में "छतरी" मामले के रूप में कार्य नहीं करता है, 2 दिन से अधिक समय लगता है। इसलिए यदि कोई फीचर मामला <= 2 दिन लेता है, तो फीचर को विकसित करने के लिए मर्ज करने के लिए एक कोड समीक्षा होगी। यदि उप-मुखौटे हैं, तो एक बार जब वे सभी अपने फीचर टिकट में विलय हो जाते हैं, तो कोई व्यक्ति उस सुविधा शाखा को विकसित करने के लिए पुल अनुरोध को नेत्रगोलक करता है, लेकिन कोड समीक्षा की समान स्तर नहीं, क्योंकि सभी उप-प्रक्रिया पहले से ही उस प्रक्रिया से गुजर चुकी हैं।
फोगवॉल्फ

जवाबों:


11

समस्या बैक-एंड और फ्रंट-एंड डेवलपमेंट के बीच कार्य के बहुत कठोर अलगाव में भी निहित हो सकती है।

यदि फ्रंट-एंड डेवलपर को एक नए एपीआई की आवश्यकता होती है, तो क्या लेआउट को मान्य करने के लिए उसे या उसके पिछले छोर पर एक डमी एपीआई बनाने की अनुमति देना संभव नहीं है? फिर एक स्टब के साथ उस आंशिक कार्यान्वयन को प्रतिबद्ध करें, और दूसरी बार में, बैक-एंड डेवलपर वास्तविक सुविधा को लागू करेगा।

निर्भरता को तोड़ने से, आपको एक बेहतर प्रवाह मिलेगा और आपके पास एक एकल कार्य के लिए प्रतीक्षा करने वाली सब कुछ नहीं है जो अड़चन के रूप में कार्य करता है।


मैंने इस बारे में सोचा था, लेकिन यह हमारी वर्तमान विकास प्रक्रिया का हिस्सा नहीं है और अतिरिक्त ओवरहेड है। मुझे नहीं लगता कि यह मुद्दा पूरी तरह से फ्रंट-एंड डेवलपर है, हालांकि विकास के दौरान परीक्षण करने के लिए बैक-एंड डेवलपर के कोड तक पहुंचने में सक्षम नहीं है। इससे पहले कि हम QA को भेजें, यह कोड समीक्षकों के लिए संपूर्ण एकीकरण (कुछ भी नहीं हुआ या ठूंसा हुआ) का स्मोक टेस्ट कर रहा है।
फोगवॉल्फ

6
हालांकि यह आपकी विकास प्रक्रिया का हिस्सा नहीं है, लेकिन क्या यह कोई अतिरिक्त ओवरहेड है, जिसके बजाय दो डेवलपर्स अपने अंगूठे को तीन दिनों तक किसी और पर अपने कोड को करने के लिए इंतजार कर रहे हैं? आपको अंगूठे-घुमाव के अनुसार 8 घंटे का समय बर्बाद करने वाला डेवलपर समय मिल गया है। उस समय की तुलना करें जो बैकएंड की निर्भरता को कम करने के लिए लेता है।
ग्रेग बरगार्ड

5

आपकी समस्या: डेवलपर मास्टर की एक शाखा, मास्टर से डेवलपर बी शाखाएं, दोनों निकट संबंधित सुविधाओं पर काम करते हैं, और अपरिहार्य तथ्य यह है कि अपरिहार्य संघर्षों के कारण मास्टर शाखा में विलय मुश्किल है जो सभी को वापस रखता है।

यदि यह देखने योग्य है, तो A और B पहले एक आम शाखा बना सकते हैं, फिर इस आम शाखा से उनके अलग-अलग काम के लिए प्रत्येक शाखा, उनके प्रत्येक अलग कार्य को सामान्य शाखा में मिला देती है, और अब आपके पास एक विरोधाभासी शाखा है, जो बहुत अधिक है एकीकृत करने के लिए आसान है।


0

यदि डेवलपर 1 फीचर ए पर काम करता है, और डेवलपर 2 ने फीचर बी पर काम करना समाप्त कर दिया है जो फीचर ए पर निर्भर करता है, तो इसके आसपास कोई रास्ता नहीं है - फीचर बी को मर्ज करना होल्ड पर है। आप फ़ीचर A के बिना इसका परीक्षण नहीं कर सकते हैं, और अभी तक इसकी समीक्षा करने का कोई मतलब नहीं है क्योंकि फ़ीचर A में आगे बढ़ने से फ़ीचर B में बदलाव हो सकते हैं।

हालांकि, इसका मतलब यह नहीं है कि डेवलपर 2 पकड़ में है! डेवलपर 2 फीचर C पर काम करना शुरू कर सकता है, और फीचर A के पूरा होते ही फीचर B के रिव्यू-फिक्स चक्र पर वापस आ सकता है। मुझे पता है कि संदर्भ स्विचिंग इष्टतम नहीं है, लेकिन जब से यह फीचर A को पूरा करने में लगने वाला समय संभवत: उन दिनों में मापा जाता है, तो यह बुरा नहीं है (आप उन्हें 15 मिनट के लिए "ज़ोन" से बाहर नहीं निकाल रहे हैं)


यकीन है, लेकिन यह काफी मुद्दा नहीं है। यह एकल फीचर के लिए अधिक है, यह प्रक्रिया थोड़ी अधिक क्रमबद्ध हो जाती है जितना कि यह होना चाहिए। यदि हम x तिथि पर एक सुविधा जारी करने के लिए निर्धारित हैं, और टिकटों की समीक्षा समानांतर में नहीं की जा सकती है, तो इससे हमारे अनुमान बंद हो रहे हैं और संभवत: रिलीज को धक्का दे रहा है।
फोगवॉल्फ

0

विकास चक्र को छोटा करने के तरीकों में से एक है कि आप स्थिति की मदद कर सकते हैं।

उस मामले में जहां एक डेवलपर दूसरे डेवलपर की सुविधा का इंतजार कर रहा है, तो क्या ऐसा तरीका है कि पहले डेवलपर्स के काम का एक हिस्सा ब्लॉक को खाली करने के लिए पूरी सुविधा से पहले समीक्षा और एकीकरण से गुजर सकता है?

क्या एकीकरण चक्र को चालू रखने के लिए कार्य की छोटी इकाइयों में सुविधाओं को तोड़ने के तरीके हैं?

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


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