एक बड़े पुल अनुरोध के साथ काम करना


15

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

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

ऐसी स्थिति से निपटने का सबसे अच्छा तरीका क्या है जहां एक शाखा वास्तव में दूसरों से बहुत दूर है? हम भविष्य में मास्टर से बहुत बड़ी संख्या में आने वाली शाखाओं से किन तरीकों से बच सकते हैं?


क्या यह व्यवसाय या ओपन सोर्स प्रोजेक्ट में है? मुझे लगता है कि इसे कैसे संभालना है, इसके जवाब अलग-अलग होंगे। यदि व्यवसाय है, तो यह कुछ प्रक्रिया मुद्दों की ओर इशारा करता है। अगर यह ओपन सोर्स काम है तो आप इसे अलग तरीके से हैंडल करना चाहेंगे।
डेनिथ

@ डायनेथ यह विशेष स्थिति व्यावसायिक संदर्भ में थी। मुझे लगता है कि आपको सबसे अच्छा तरीका एक ओपन सोर्स प्रोजेक्ट में मिलेगा।
शटल87

जवाबों:


12

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

ऐसी स्थिति से निपटने का सबसे अच्छा तरीका क्या है जहां एक शाखा वास्तव में दूसरों से बहुत दूर है?

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

यदि यह डेवलपर वास्तव में शानदार है, और उनका कोड संयुक्त टीम के बाकी हिस्सों की तुलना में बेहतर / स्मार्ट / अधिक महत्वपूर्ण है, तो यह उनके बजाय आपकी समस्या बनाने के लायक है। अन्यथा, यह नहीं है।

शाब्दिक प्रश्न का उत्तर देने के लिए: इस तरह की स्थिति से निपटने का सबसे अच्छा तरीका उस तरह की स्थिति में नहीं आना है।

हम भविष्य में मास्टर से बहुत बड़ी संख्या में आने वाली शाखाओं से किन तरीकों से बच सकते हैं?

सुनिश्चित करें कि सभी ने नोटिस किया कि डेवलपर जो विलय के बिना महीनों के लिए गया था, उन्हें उस समस्या को ठीक करने की आवश्यकता है जो उन्हें हुई। सुनिश्चित करें कि हर कोई जानता है कि बार-बार मास्टर से कमिटमेंट करना आसान है, क्योंकि कम बदलाव का मतलब है संघर्षों के कम अवसर।

सुनिश्चित करें कि लोगों को पता है कि वे अन्य लोगों के परिवर्तनों के साथ अप-टू-डेट रहने के लिए मास्टर से खींच सकते हैं।

"यदि आप हर दिन विलय करते हैं, तो अचानक आप उस बिंदु पर कभी नहीं पहुंचते हैं जहां आपके पास बहुत बड़े संघर्ष हैं जिन्हें हल करना मुश्किल है।" -लीनस टोरवाल्ड्स

वह उद्धरण उस बात से है जो उसने Google पर दी है, यहाँ का प्रतिलेख है , और यहाँ वीडियो है


2

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

यदि आपके पास कुछ कमिट्स हैं, जिन्हें आप मर्ज करना चाहते हैं, लेकिन वे अन्य कमिट्स के साथ इंटरप्रेस्ड हैं, जो प्रोडक्शन के लिए तैयार नहीं हैं, तो मुझे 2 संभावनाएं दिखाई देती हैं:

  1. नई शाखा बनाएं, और चेरी अच्छे काम करें, मास्टर के साथ विलय करें।
  2. अनपेक्षित तरीके से शीर्ष पर पुन: प्रवेश करने का प्रयास करें (हो सकता है कि नई शाखा पर सिर्फ सुरक्षित होने के लिए)।

रोकथाम के तरीकों के लिए, कुछ मज़ेदार टीम नियमों को परिभाषित करने का प्रयास करें जैसे "एक जो एक सप्ताह के भीतर मास्टर के साथ विलय नहीं करता है वह एक महीने के लिए पिज्जा का आदेश देगा"।


1

पहले, देखें कि क्या वास्तव में अलग-अलग कमिट हैं जिन्हें मर्ज किया जा सकता है या चेरी-पिक किया गया है, जैसे @Maciej Chalpuk द्वारा सुझाव दिया गया है। यदि यह मामला है, तो वास्तव में स्थिति इतनी खराब नहीं है, और मैं भविष्य में इसके बारे में बहुत ज्यादा चिंता नहीं करूंगा।

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

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


1

यहाँ एक सरल उपाय है।

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

मैं इसे एक उदाहरण के रूप में तोड़ता हूं।

आज्ञा देना: शाखा A मास्टर शाखा से शाखा हो A + = शाखा A + नई सुविधा १ शाखा A ++ = शाखा A + नई सुविधा २ और इसी तरह आगे

आपको वापस जाने के लिए क्या करना होगा: शाखा A +

शाखा A + लें और इसे मास्टर के साथ मर्ज करें।

अब Branch A ++ पर जाएं और इसे (Master + Branch A +) के साथ मर्ज करें।

तब तक दोहराएं जब तक आप अंतिम शाखा A + ... + पर नहीं पहुंच जाते।

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

हम भविष्य में मास्टर से बहुत बड़ी संख्या में आने वाली शाखाओं से किन तरीकों से बच सकते हैं?

मुझे लगता है कि ऊपर दिया गया मेरा समाधान बताता है कि भविष्य में आपको क्या तरीका अपनाना चाहिए। प्रत्येक शाखा के लिए प्रति सुविधा या कार्य पद्धति के साथ जाएं।

मैं एक दृष्टिकोण का उपयोग करने का सुझाव दूंगा:

पूर्व-गुरु और गुरु

मास्टर: अंतिम / उत्पादन स्तर। अक्सर संशोधित नहीं होता है। हमेशा स्थिर माना जाता है

प्री-मास्टर: वह क्षेत्र जहाँ मौजूदा कोड में एक नई सुविधा जोड़ी जाती है। मौजूदा कोड-बेस के साथ काम करने के लिए पूरी तरह से परीक्षण किया गया है, और वह स्थान है जहां अन्य शाखाएं नई सुविधा के कार्यान्वयन के लिए कांटा कर सकती हैं।

आपको संस्करण-लक्ष्यीकरण के लिए बंडलिंग फीचर और लक्ष्य साधने की कोशिश करनी चाहिए।

संस्करण-लक्ष्यीकरण: एक मनमानी संख्या निर्दिष्ट करें जो मास्टर शाखा के लिए प्लेसहोल्डर के रूप में कार्य करेगी। "V1.0.0 में, हम X, Y, Z फीचर्स हासिल करना चाहते हैं। V1.0.0 में ये सभी फंक्शन्स उपलब्ध होंगे ..."

मास्टर के खिलाफ एक संस्करण बनाए रखने से, यह हर समय "मास्टर" को स्थिर और उत्पादन-तैयार रखने का एक तरीका भी हो सकता है।


0

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

यदि आप एक फुर्तीली या एससीआरयूएम ढांचे के भीतर काम कर रहे हैं, तो टीम को वास्तव में यह पूछना चाहिए कि फीचर पूरा क्यों नहीं हुआ और पुनरावृत्ति / स्प्रिंट के भाग के रूप में विलय नहीं हुआ। यदि यह "बहुत बड़ा" एक पुनरावृत्ति के भीतर फिट होने के लिए था, तो इसे छोटे टुकड़ों में तोड़ दिया जाना चाहिए था।

यह कोड स्वामित्व का प्रश्न भी उठाता है - आपकी टीम के भीतर, क्या अलग-अलग डेवलपर्स अपने काम को अलग से करते हैं, या पूरी टीम एक साथ काम करती है ताकि यह सुनिश्चित हो सके कि आइटम किए गए हैं?

बेशक, उपरोक्त मानता है कि आपकी टीम किसी प्रकार की कंपनी संरचना के भीतर है। यदि यह स्वयंसेवक योगदानकर्ताओं के साथ एक ओपन-सोर्स प्रोजेक्ट है, तो यह एक और कहानी है। आम तौर पर ऐसी परियोजनाओं में वर्कफ़्लोज़ पर नियंत्रण होता है, लेकिन स्वीकार्य पुल अनुरोधों को उत्पन्न करने का दबाव व्यक्तिगत योगदानकर्ताओं पर अधिक बार पड़ता है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.