कोड बेस के एक अलग हिस्से पर काम करते समय बग को ठीक करना


19

मेरे साथ कम से कम एक बार ऐसा हुआ। मैं कोड बेस के कुछ हिस्से पर काम कर रहा हूं और एक अलग भाग में एक छोटा बग ढूंढता हूं, और बग मुझे वह पूरा करने से रोकता है जो मैं वर्तमान में करने की कोशिश कर रहा हूं। बग को ठीक करना एकल कथन को बदलने के समान सरल हो सकता है।

उस स्थिति में आप क्या करते हैं?

  1. बग को ठीक करें और अपने वर्तमान कार्य के साथ इसे प्रतिबद्ध करें
  2. अपने वर्तमान कार्य को कहीं और सहेजें, बग को एक अलग प्रतिबद्ध में ठीक करें, फिर अपना काम जारी रखें [1]
  3. जारी रखें कि आप क्या करने वाले हैं, कोड (भले ही यह हो) निर्माण को तोड़ता है कुछ परीक्षण विफल हो जाते हैं, तो बग को ठीक करें (और निर्माण एक अलग प्रतिबद्ध में परीक्षण पास) बनाते हैं

[१] व्यवहार में, इसका अर्थ होगा: मूल रिपॉजिटरी को कहीं और क्लोन करना, बग को ठीक करना, परिवर्तनों को कमिट करना / धकेलना, उस कमेटी को रिपोजिटरी पर खींचना जो आप काम कर रहे हैं, परिवर्तनों को मर्ज करें और अपना काम जारी रखें।

संपादित करें: मैं वास्तव में क्या मतलब था यह प्रतिबिंबित करने के लिए मैंने नंबर तीन को बदल दिया।


2
एक ही लेनदेन में बग फिक्स और आपके बदलाव दोनों क्यों नहीं? यह बहुत आम है, और साफ है। आपको अपनी टिप्पणी में उचित टिप्पणी करनी होगी।

@ पियरे, वह नंबर 1 है। मुझे लगता है कि मैं इससे बेहतर शब्द चुन सकता था silently
imgx64

मैं आमतौर पर एक ही प्रतिबद्ध में कई सुधार करता हूं। मैं उन्हें टास्क आईडी का उपयोग करके संदर्भित करता हूं, और मैंने अपने

2
@Pierre 303 अरे यार, इतना बुरा व्यवहार! दानेदार करने के लिए अपने कमिट विभाजित करें।
वैकल्पिक

@mathepic: जब कोई परिवर्तन केवल एक कार्य को प्रभावित करता है हाँ, लेकिन जब यह कई कार्यों को प्रभावित करता है, तो निर्माण को तोड़े बिना यह संभव नहीं है

जवाबों:


15

मैंने 1 और 2 किया है और अंत में, मुझे लगता है कि मैं # 2 पसंद करता हूं। यह बग फिक्स के लिए अधिक दृश्यता की अनुमति देता है, जो क्यूए / रिलीज नोट्स / अन्य डेवलपर्स के लिए महत्वपूर्ण हो सकता है।

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


11

मैं आमतौर पर # 2 के लिए जाता हूं। यह रिपॉजिटरी क्लीनर बनाता है, और लॉग को अधिक समझने योग्य बनाता है। मुझे इससे नफरत है जब अन्य देवता मैं 15 अलग बग फिक्स, फीचर्स, और सभी एक ही कमिट में रिफैक्टोरिंग के साथ काम करता हूं।

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


7

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


धन्यवाद, वह ब्लॉग पोस्ट बहुत उपयोगी है, और मेरे मामले में लागू है (मैं मर्क्यूरियल का उपयोग करता हूं, जिसमें कमोबेश उसी तरह की विशेषताएं हैं जैसे कि जीआईआर)। मुझे लगता है कि मुझे किसी दिन द बुक पढ़ना चाहिए।
imgx64

@ imgx64: मैं नहीं जानता कि क्या यह सूचकांक के बराबर है। यह git का किलर फीचर IMO है
Daenyth

उस ब्लॉग पोस्ट में टिप्पणियों को पढ़ना, मर्क्यूरियल के समतुल्य एक्सटेंशन हैं। shelveविस्तार मैं क्या जरूरत है।
imgx64

@ imgx64 शेल्व उपयोगी हो सकता है, हाँ। लेकिन मुझे लगता है कि रिकॉर्ड विस्तार अधिक उपयुक्त है। मैं इसे केवल TortoiseHg GUI के माध्यम से उपयोग करता हूं (आप इसे हटाने के लिए / कमिट करने के लिए एक अंतर पर डबल-क्लिक कर सकते हैं)।
बरजक

3

मैं अलिखित विकल्प (4) का चयन करता हूं: अपनी परियोजना को अति-विशिष्ट विधानसभाओं / पुस्तकालयों में विभाजित करें, ताकि असंबंधित बग हमेशा संस्करण नियंत्रण पेड़ में एक अलग स्थान पर होंगे।

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

जब मैं किसी विशिष्ट सुविधा पर काम कर रहा होता हूं, तब भी मुझे अक्सर पूरी तरह से असंबंधित बग मिलते हैं। मैं यूआई पर काम कर रहा हूं और कुछ व्यावसायिक तर्क में बग ढूंढ सकता हूं, और मुझे आगे बढ़ने से पहले इसे ठीक करना होगा। अंतर यह है कि व्यापार तर्क हमेशा यूआई से एक अलग विधानसभा / परियोजना में होता है, इसलिए मुझे केवल इतना करना है कि बीएल में एक बहुत ही मामूली बदलाव करें और एक बहुत ही कमिटमेंट के साथ आगे बढ़ें, फिर काम करते रहें।

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

यदि आपके पास इस विकल्प का अभाव है - अर्थात आप परियोजना संगठन में बिना कहे एक कनिष्ठ देव हैं - तो मैं बस # 1 के साथ जाऊंगा और लॉग में उचित नोट्स बनाऊंगा ताकि दूसरे लोग जान सकें कि आपने क्या किया। यदि आपने एक बड़ा बदलाव किया है तो अपने इश्यू ट्रैकिंग सिस्टम में बग रिपोर्ट दर्ज करें कि आपने क्या और क्यों तय किया है।


2
जबकि मैं सहमत हूँ, कि सभी स्थितियों में काम नहीं करता है। 'कोड के एक अलग भाग में बग' एक मूल वर्ग में या यहां तक ​​कि एक ही कक्षा में एक अलग विधि में हो सकता है। आप अलग-अलग पुस्तकालयों में उन्हें अलग नहीं कर सकते।
imgx64

@img: ज़रूर, लेकिन अगर कोड आधार का "अलग हिस्सा" आप के साथ काम कर रहे हैं, तो आप इसे इतना ध्यान देने का औचित्य साबित नहीं कर सकते - बस इसे ठीक करें! : पी
हारून

1

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


3
गिट के साथ, आप एक ही फ़ाइल में कई परिवर्तनों को कई कमिटों में विभाजित कर सकते हैं - मैं अक्सर ऐसा नहीं होने पर याद करता हूं जब SVN- आधारित परियोजनाओं पर काम कर रहा हो।
पीटर बॉटन

1

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


1

संक्षिप्त उत्तर: # 2 आप वास्तव में चाहते हैं कि बगफिक्स (अपने ट्रैकर में नोट के साथ!) को एक अलग इकाई के रूप में आपके संस्करण इतिहास में टैग किया गया हो।

दीर्घ उत्तर:

  • बग भर में ठोकर
  • बग को प्रदर्शित करते हुए परीक्षण या अधिक लिखें
  • टेस्ट पास करें
  • सिर्फ इतना है कि परिवर्तन के लिए प्रतिबद्ध है और इसके परीक्षण ( git add --interactiveया darcs record -iया फिर भी अपने VCS यह होता है) (*)
  • जो मैं कर रहा था, उसे वापस पाओ।

(*) सीवीएस (नहीं, वास्तव में) में मुझे कभी-कभी एक साफ पेड़ की जाँच के साथ-साथ एक कॉपी भी मिलती है, जिस पर मैं काम करता हूं। फिर मैं एक मर्ज - विनमर का उपयोग करता हूं, मेरे मामले में - सिर्फ बगफिक्स को साफ पेड़ में खींचने के लिए ताकि मैं इसे अलग से कर सकूं। (आपकी बदली हुई फ़ाइलों का नाम बदलने cvs updateऔर विलय करने के लिए अन्य विकल्प । जब आपने परिवर्तन किया है, तो फ़ाइल को हटा दें और अपनी स्थानांतरित फ़ाइलों को उनके मूल नामों पर वापस नाम दें।)

कुछ ध्यान देने योग्य बात यह है कि मैं आमतौर पर केवल ऐसे कीड़े ढूंढता हूं जो या तो मैं जो काम कर रहा हूं, उससे संबंधित हो, या समीपवर्ती निकटता में हो। मुझे आश्चर्य होगा कि अगर लोगों के लिए कोडबेस के असंबंधित हिस्सों में बग ढूंढना सामान्य था - बग को ठीक करते समय आप असंबंधित कोड क्यों पढ़ रहे हैं? (हां, यह वही है, जो हारूनहट कहता है, इसके ठीक विपरीत है!)


1

मैं बग को ठीक करता हूं और मैं अलग-अलग कमिट करता हूं , प्रत्येक फिक्स / फीचर के लिए।

अधिकांश समय, परिवर्तन एक ही फ़ाइल में नहीं होते हैं, इसलिए कमिट को अलग करना आसान है। यदि परिवर्तन एक ही फ़ाइल में हैं, तो मैं जिस अंतर को कमिट करना चाहता हूं उसका चयन करने के लिए TortoiseHg (एक mecurial GUI फ्रंट-एंड) का उपयोग करता हूं (मुझे लगता है कि यह रिकॉर्ड एक्सटेंशन के साथ कमांड लाइन पर ऐसा करना संभव है , लेकिन यह कम सुविधाजनक है )।

कुछ लोग एक सुविधा पर काम करते समय मामूली सुधार को अलग करने के लिए मर्क्यूरियल क्यू का उपयोग करते हैं। मामूली सुधार MQ में स्टैक्ड होते हैं, और जब सुविधा समाप्त और प्रतिबद्ध होती है, तो कतार की सामग्री भी प्रतिबद्ध होती है (कतार में प्रत्येक प्रविष्टि के लिए एक बदलाव)।


0

मैं आमतौर पर # २। मेरे वर्तमान कार्य को कहीं और सहेजना: यह आमतौर पर एक पैच बनाकर ठीक काम करता है। इसके अलावा कुछ IDEs (IntelliJ) परिवर्तनों को ठंडे बस्ते में डालने की अनुमति देते हैं जो वास्तव में है: वर्तमान कार्य को कहीं और सहेजें।


0

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

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

दोनों परिस्थितियों में बगफिक्स का परीक्षण मेरे द्वारा किया जाता है, किसी प्रकार के निशान के साथ जांच की जाती है, ताकि लोग समझें कि मैंने उस दिन कोड को बेतरतीब ढंग से क्यों बदल दिया, और यह पुष्टि करने के लिए कोई अन्य व्यक्ति को सौंपा गया है।


0

हम # 1 करते हैं। # 2 अच्छा लगता है, लेकिन मैं यह नहीं कह सकता कि हमें # 1 के साथ समस्या थी कि # 2 ठीक हो जाएगी।

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

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