क्या बार-बार जटिल शिकायतें समस्याओं का संकेत हैं?


35

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

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

क्या मैं यह सोचने में सही हूँ? क्या जटिल मर्ज कुछ अच्छे या बुरे का संकेत है?


1
सुविधाएँ कब तक रहती हैं? कोड कितना सुव्यवस्थित है? क्या आप (उदाहरण के लिए), टेस्ट कोड कमिट में चेरी चुन सकते हैं (यह पहले किया गया था, और वास्तविक कोड से अलग, सही?) यह देखने के लिए कि कार्यक्षमता कैसे बदल गई?

@MichaelT कोड बेस हमारे स्वचालित टेस्ट कोड बेस के लिए है। हम अपनी परियोजना के लिए एक नए जोड़ पर काम शुरू करने वाले हैं जिसके लिए थोड़े से समांतर विकास की आवश्यकता होगी। इसलिए फीचर-शाखाओं की चर्चा अन्य बनाम।
joshin4colours

7
क्या लोग वास्तव में इस तरह की समस्या में भाग लेते हैं, या क्या वे डरते हैं कि वे समस्याएँ प्रकट हो सकती हैं?
क्रिस्टोफर क्रेतुजिग

2
वैसे, आपके द्वारा AWESOME ट्यूटोरियल को :)
वोरैक

1
फीचर शाखा को रिबास करना या ट्रंक के साथ विलय करना इसी तरह के मर्ज में परिणाम है। रिबासिंग वास्तव में अधिक मर्ज करता है और इस तरह से खराब संघर्ष पैदा होने की अधिक संभावना है। क्या मायने रखता है कि यह कितनी बार किया जाता है।
Jan Hudec

जवाबों:


23

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

मुझे लगता है कि आप इसे अन्य तरीकों से पहले नोटिस करेंगे, लेकिन यह संभव है कि आप इसके लिए इतने अभ्यस्त हों कि आप इसे अब और नहीं देख सकते।


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

1
तथ्य यह है कि हमारा कोडबेस कुछ हद तक "युवा" है (लगभग 6 महीने पुराना, कई प्रमुख रिफैक्टर्स के माध्यम से चला गया) इसका एक संकेतक हो सकता है।
joshin4colours

10
@ joshin4colours यदि आप किसी बड़ी सुविधा को लिख रहे हैं, तो आप फिर से काम कर रहे हैं, तो आप परेशानी में हैं।
सीन मैकमोसेलिंग

17

मैं "लाने-रिबास-पुश" वर्कफ़्लो का उपयोग कर रहा हूं। जो वास्तव में सबसे पहले, सबसे आदिम, वर्कफ़्लो है, जिसे आपके ट्यूटोरियल में वर्णित किया गया है वे फायदे हैं:

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

अब, जटिल मर्ज संघर्ष के विषय में। मुझे समझ में नहीं आता है कि कोई भी लगातार और जटिल विलय का अनुभव कैसे कर सकता है । लंबे समय तक पुनरावृत्ति / चेरी-पिकिंग नहीं करने से जटिलता उत्पन्न होती है, एक महीने के लिए उस अकेली सुविधा पर काम करना।

मैं व्यक्तिगत रूप से लगातार, आसान मर्ज (वास्तव में रिबेस) संघर्षों के बजाय दुर्लभ, सभी तरह के मर्ज हॉरर से निपटना पसंद करूंगा।


1
एक अच्छा Git वर्कफ़्लो का शानदार वर्णन, लेकिन यह मेरे प्रश्न का उत्तर नहीं देता है।
joshin4colours

2
@ जोशी यह सच है। केवल मध्य पैराग्राफ तरह का अपना प्रश्न। लेकिन यहाँ एक सीधा जवाब है। यदि विलय लगातार और कठिन है, तो यह निश्चित रूप से समस्याग्रस्त वर्कफ़्लो / संचार समस्या / वास्तुकला समस्या / विभाजन या भूमिकाओं की समस्या का संकेत है।
वोरैक

7

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

पुल-रिबास विधि का लाभ और दोष यह केंद्रीकृत वर्कफ़्लो के समान है जो बहुत सारे लोगों के लिए उपयोग किया जाता है। इसका उपयोग करने के लिए आपको ब्रांचिंग को समझने की जरूरत नहीं है।

किसी भी दर पर, यह केवल स्थानीय स्तर पर एक सुविधा शाखा वर्कफ़्लो करने के लिए पूरी तरह से संभव है, यदि आप अन्य लोगों को इस पर साइन इन करने के लिए नहीं मिल सकते हैं।


5

मैं जिस प्रोजेक्ट पर काम कर रहा हूं, उस पर समय-समय पर इस प्रकार की समस्या आती है और यह कुछ कारकों के कारण लगता है:

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

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


4

जब तक डेवलपर्स ऐतिहासिक कमिट (शुद्ध विलय के बजाय) को संशोधित नहीं कर रहे हैं, एक सुविधा वर्कफ़्लो टाइप गिट मॉडल में संघर्ष एक कसकर युग्मित कोडबेस (/ ब्रैंडन्यू कोडबेस) या ओवरलैपिंग फ़ीचर असाइनमेंट का संकेत है।


0

आपके पास एक मुख्य (मास्टर) शाखा है और हर कोई अपनी सुविधा शाखाओं में काम करता है।

फीचर शाखाओं में काम कुछ घंटों से लेकर कुछ महीनों तक हो सकता है।

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

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


1
मुख्य शाखा में विलय के लिए कभी कोई संघर्ष नहीं होना चाहिए । आप हमेशा पहले फ़ीचर करने के लिए मेन मर्ज करते हैं, इसलिए मेन टू फ़ीचर तब संघर्ष मुक्त होता है।
gnasher729

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

उन्होंने कहा कि "आपके पास फीचर से मास्टर में विलय होने की संभावना अधिक है"
gnasher729

0

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

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