परावर्तन के कारण मर्ज का विरोध हल


13

मैं हाल ही में एक चर्चा में शामिल हुआ कि कैसे सामान्य रूप से रीफैक्टरिंग को संभालना है (जो अपने आप में एक दिलचस्प विषय है)। अंततः निम्नलिखित प्रश्न सामने लाया गया:

कैसे एक हैंडल मर्ज का सामना करता है जो कि किसी के कारण कोड के एक हिस्से का पुनर्सक्रियण करता है, जबकि कोई और कोड के एक ही टुकड़े के लिए एक फीचर पर काम कर रहा था?

मूल रूप से, मुझे इस बारे में कोई जानकारी नहीं है कि कुशल तरीके से इससे कैसे निपटा जाए। क्या ऐसी कोई सर्वोत्तम प्रथाएं हैं जिनके बारे में किसी को पालन करना चाहिए? क्या इस बात पर कोई अंतर है कि किसी को इस प्रणाली के लिए विरासत कोड के साथ कैसे संभालना चाहिए?


मेरे पास एक समान प्रश्न है, लेकिन विभिन्न आवश्यकताओं के साथ, इसलिए मैंने एक और प्रश्न जोड़ा। programmers.stackexchange.com/questions/109229/…
रोजर सीएस वर्नरसन

जवाबों:


9

अच्छा प्रश्न। सबसे अच्छी रणनीति मैं सोच सकता हूं:

निवारण

निरंतर एकीकरण और छोटे रिफैक्टोरिंग बनाने का संयोजन अक्सर (कभी-कभी बड़े रिफैक्टोरिंग के बजाय) इस तरह के संघर्षों की लागत और आवृत्ति को कम करने के लिए एक लंबा रास्ता तय करेगा।


3

मैं आपके प्रश्न का उत्तर देने के लिए सोचता हूं, पहले हमें यह देखना होगा कि टकराव क्यों होता है, और विलय का सही अर्थ और प्रक्रिया क्या है?

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

प्रकृति में इसका मतलब है कि दूसरे डेवलपर के पास पहले डेवलपर की तुलना में कुछ अलग है। यह अंतर स्टाइलिंग से भिन्न हो सकता है, जैसे आपके द्वारा बताए गए स्तर तक उपयोग new UserManager().GetUserName()करने के बजाय UserManager userManager = new UserManager(); userManager.GetUserName();, जिसका अर्थ है कि दोनों डेवलपर्स के पास इस बारे में अलग-अलग विचार थे कि इसे सुधारने के लिए कोड को कैसे रिफैक्ट किया जाए।

दूसरी ओर विलय, इसका मतलब यह नहीं है कि डेवलपर्स संघर्षों पर विचार किए बिना अपने कोड में जांच कर सकते हैं। वे चाहिए और चाहिए उन संघर्षों का समाधान करें। यदि संघर्ष महत्वपूर्ण नहीं हैं, तो वे पिछले कोड को चेक-इन और ओवरराइड कर सकते हैं। लेकिन जब वे कुछ पूरी तरह से अलग देखते हैं, तो उन्हें पिछले डेवलपर को कॉल करना चाहिए, और उससे बात करनी चाहिए, ताकि वे दोनों एक साथ मिलकर सबसे अच्छा समाधान चेक-इन कर सकें।

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

मैं इन परिस्थितियों को रोकने पर सहमत नहीं हूं , क्योंकि हमें सैद्धांतिक से अधिक वास्तविक होना चाहिए। कभी-कभी एक लड़का सीएसएस पर वास्तव में अच्छा होता है, जबकि दूसरा वास्तव में ASP.NET मार्कअप में अच्छा होता है। लेकिन जब वे दोनों इसे काम करने के लिए लॉगिन पेज पर काम करना चाहिए तो उनका काम संघर्ष हो सकता है। मेरा मतलब है, अगर हम वास्तविक (आदर्श नहीं) सोचते हैं, तो हम देख सकते हैं कि कई बार यह घटना (संघर्ष) होती है।

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


3

यदि कार्यों का कोई सक्रिय प्रबंधन नहीं है, तो आपके पास संघर्ष हैं।

यदि, हालांकि, आपके पास दैनिक स्टैंड अप मीटिंग या प्रबंधक है , तो आपको संभवतः यह समस्या नहीं हो सकती है।

या तो बात करें (एक दैनिक स्टैंड के माध्यम से) या एक प्रबंधक से बात करें।

यह तुच्छ रूप से बात करके रोका गया है।


+1। कुछ डेवलपर्स प्रबंधकों को एक बाधा के रूप में देखते हैं। लेकिन प्रबंधक वास्तव में अन्य लोगों को काम करने में सक्षम बनाने के लिए मौजूद हैं , और यह एक समस्या का एक उत्कृष्ट उदाहरण है जिसकी वे मदद कर सकते हैं।
MarkJ

@ मर्कज: संघर्षों का विलय करने के लिए एक प्रबंधक एक बुरी चीज नहीं है। बहुत बढ़िया बिंदु।
एस.लूट।

+1 मैं बस अपने उत्तर में ऐसा कुछ जोड़ने वाला था, लेकिन आपने इसे रद्द कर दिया। यदि आप किसी अन्य व्यक्ति को उसी क्षेत्र में काम कर रहे हैं, यह जानने के लिए आप एक संघर्ष का उपयोग कर रहे हैं, तो आपको खेल में बहुत देर हो जाएगी और फिर उससे निपटना होगा। टास्क प्रबंधन और संचार शुरू से ही एक साथ काम करने के लिए एक ही क्षेत्र में काम करने वाले डेवलपर्स को सक्षम कर सकते हैं ।
ज्ञान उर्फ ​​गैरी ब्यून

1

एक निश्चित विशेषता को विकसित करने के लिए एक अलग आम शाखा है, विलय / पुल / पुश अक्सर - यही है।

और संवाद करें । लॉन्च करते समय भी कोड के बारे में अन्य डेवलपर्स से बात करें। जब भी कोडिंग)))


1

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

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