2014-05-07 6 views
6

मुझे यकीन नहीं है कि मैं स्वचालित रूप से विलय करने के लिए गिट पर भरोसा कर सकता हूं। यहां एक परिदृश्य है।मैं गिट विलय पर भरोसा कैसे कर सकता हूं?

मास्टर में एक कार्यक्रम बनाएँ:

MOVE 0 TO I. 
A. 
    PERFORM X-PROC. 
    IF I IS EQUAL TO 25 THEN GO TO A. 

डेवलपर 1 एक शाखा बनाता है और पाता है वहाँ एक बग है कि: अनंत लूप। उन्होंने कहा कि यह ठीक करता है:

MOVE 0 TO I. 
A. 
    ADD 1 TO I. 
    PERFORM X-PROC. 
    IF I IS EQUAL TO 25 THEN GO TO A. 

इस बीच डेवलपर 2 एक शाखा बनाता है और अपने हिसाब से बग समाधान:

MOVE 0 TO I. 
A. 
    PERFORM X-PROC. 
    ADD 1 TO I. 
    IF I IS EQUAL TO 25 THEN GO TO A. 

दोनों डेवलपर के लिए अपने कोड का परीक्षण और यह सही लगता है। दोनों गुरु के विलय:

MOVE 0 TO I. 
A. 
    ADD 1 TO I. 
    PERFORM X-PROC. 
    ADD 1 TO I. 
    IF I IS EQUAL TO 25 THEN GO TO A. 

अनंत लूप वापस आ गया है।

ऐसा लगता है कि यह समस्या किसी भी तरह के वितरित विकास पर्यावरण में अक्सर होती है। जब मैंने इसका परीक्षण किया, तो गिट ने मर्ज विवाद की रिपोर्ट नहीं की। कभी-कभी यह समस्या लंबे समय तक ज्ञात नहीं जा सकती थी। एक रिग्रेशन टेस्ट इसे ढूंढना चाहिए, लेकिन गिट में रिग्रेशन टेस्ट विलय कर दिए जाते हैं, इसलिए हम उन पर भरोसा नहीं कर सकते हैं।

मैं इसके बारे में क्या कर सकता हूं? क्या मुझे हर विलय के बाद कोड पढ़ने की ज़रूरत है?

उत्तर

9

क्या मुझे प्रत्येक विलय के बाद कोड पढ़ने की आवश्यकता है?

हां, ज़ाहिर है।

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

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

सर्वोत्तम अभ्यास: जब आप सफलतापूर्वक स्वत: सक्रिय होते हैं, तब भी आपको उन्हें अपने विलयों की समीक्षा या धक्का देने से पहले समीक्षा करना चाहिए।

+4

टेस्ट सूट/यूनिट परीक्षण वर्कलोड को कम करने के लिए एक शानदार टूल हैं यदि आपके पास गर्गेंट्यून विलय हो रहा है (जो आपको आमतौर पर नहीं होना चाहिए) - लेकिन सुरक्षा की झूठी भावना में न पड़ें और स्वच्छता की उपेक्षा न करें- अपने विलय की जांच करें, सिर्फ इसलिए कि आपके परीक्षण सभी पास हो जाते हैं! –

+1

एक तकनीक जिसका उपयोग मैं विलय को कम दर्दनाक बनाने के लिए करता हूं, वह दूसरी शाखा के साथ विलय से पहले और बाद में शाखा का अंतर लेना है, और उसके बाद उस भिन्नता (भिन्नता प्रोग्राम का उपयोग करके) में किए गए परिवर्तनों के अंतर के साथ तुलना करें दूसरी शाखा यदि diffs के बीच कोई अंतर नहीं है, तो मुझे अधिक विश्वास हो सकता है कि विलय को नहीं जोड़ा गया था। –

+0

धन्यवाद NevikRehnel और @cupcake - मैं सैनिटी जांच विलय के लिए सभी की रणनीतियों को प्यार या सुनूंगा! –

संबंधित मुद्दे