Git bisect: अपने कोड में बग की पहचान कैसे करें?



Git bisect पर यह लेख, सीखें कि b git bisect in कमांड पहले खराब प्रतिबद्ध का पता लगाने में कैसे मदद करता है जो बाइनरी सर्च एल्गोरिथ्म का उपयोग करके बग का परिचय देता है।

कल तक मेरा कोड ठीक काम कर रहा था, लेकिन तब तक नहीं जब तक कि रिमोट रिपॉजिटरी के हालिया पुल ने कोड को तोड़ नहीं दिया !!!

यदि आप एक जैसी स्थिति में हैं और नहीं जानते हैं क्या परिवर्तन कोड को तोड़ दिया या who कई योगदानकर्ताओं में से का मालिक है यह बग / सुविधा , तो गिट बिसेक्ट आपका रास्ता है। तो, git bisect पर इस लेख में आप जानेंगे कि कैसे ongit bisectTo कमांड आता है पहली खराब प्रतिबद्ध का पता लगाने में बचाव जो बाइनरी खोज एल्गोरिदम का उपयोग करके बग का परिचय देता है।

इस लेख में शामिल विषय इस प्रकार हैं:





क्यों git bisect का उपयोग करें?

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



इसलिए, ऐसे परिदृश्यों से बचने के लिए, आप इसका उपयोग कर सकते हैंgit bisectखराब प्रोजेक्ट रिवीजन (या स्नैपशॉट) को खोजने के लिए कमांड करें और अंततः इसे ठीक करेंgit रिवर्टआज्ञा।

Does गिट बायसेक्ट ’की खोज कैसे होती है?



यह आज्ञा बाइसेक्ट्स (विभाजित) के बीच अपना इतिहास अच्छा न और यह खराब प्रतिबद्ध है सीमा। यह आपकी ओर इशारा करता है वर्तमान परियोजना राज्य को मध्य स्तर प्रतिबद्ध है स्नैपशॉट। Git bisect कमांड तब से आगे बढ़ती है हर कमिट आई.डी. इस सीमा के बीच जबकि ठहराव प्रत्येक स्नैपशॉट में आपको अनुमति देने के लिए कोड का परीक्षण करें । यदि बग मौजूद है, तो आप कमिट की घोषणा करते हैं खराब, यदि नहीं अच्छा न जब तक खोज खत्म नहीं होती।

वाक्य - विन्यास

git bisect

Git bisect को बेहतर तरीके से समझने के लिए, हम एक प्रोजेक्ट बनाते हैं जो एक कार में उपयोग किए जाने वाले सरल नेविगेशन ऐप के लिए कोड विकसित करता है।

प्रारंभिक परियोजना सेटअप

एक प्रोजेक्ट बनाने के लिए जो एक कार में उपयोग किए जाने वाले सरल नेविगेशन ऐप के लिए कोड विकसित करता है, आप नीचे दिए गए चरणों का पालन कर सकते हैं:

स्टेप 1: अपने $ HOME फ़ोल्डर में एक नई निर्देशिका बनाएँ:

cd $ HOME mkdir my_nav_app

चरण 2: नई निर्देशिका पर नेविगेट करें:

cd $ my_nav_app

चरण 3: मेरे GitHub पृष्ठ से परियोजना को डाउनलोड करने के लिए क्लोन:

git clone https://github.com/divyabhushan/my_nav_app.git

अब, प्रोजेक्ट डायरेक्टरी और फाइल्स लेआउट को समझें, जैसा कि कमांड द्वारा प्रिंट किया गया है:ls -lTR

स्रोत कोड लेआउट - गिट बिसेक - एडुरका

अगला, इस कोड को उत्पन्न करने के लिए मेरे द्वारा किए गए कमेंट्स को देखने के लिए प्रोजेक्ट हिस्ट्री जर्नल देखें-

उदाहरण के लिए, एक साधारण git लॉग कमांड इतिहास को विस्तार से प्रिंट करता है, हालांकि, मुझे सुंदर प्रारूप पसंद है और इतिहास को अनुकूलित करता है। जिससे, हमें उपनाम नाम सेट करें - - hist ’ का उपयोग git उर्फ नीचे दिखाए अनुसार कमांड:

git alias.hist 'log --pretty = format:'% C (पीला)% h% Creset% विज्ञापन | % C (हरा)% s% Creset% C (लाल)% d% Creset% C (नीला) [% a] '--graph --decorate --date = short'

ec2 स्नैपशॉट से उदाहरण बनाएँ

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

  • शाखा 'देव' बनाएँ: [मास्टर] $गिट शाखा देव
  • शाखा पर जाएँ 'देव': $git चेकआउट देव
  • इतिहास लॉग की सूची: [देव] $जा छुप जाना[नोट: Note उर्फ ​​कमांड का इस्तेमाल यहां किया जाता है]

इसके अलावा, मैंने पिछली ज्ञात अच्छी प्रतिबद्धताओं पर प्रकाश डाला है, जो मुझे पता है कि मेरी स्क्रिप्ट ने अपेक्षित परीक्षा परिणाम के साथ ठीक काम किया है, यह प्रतिबद्ध स्नैपशॉट है टैग किया हुआ v1.0 के रूप में।

इसलिए, अब जब हम अपनी अंतिम अच्छी प्रतिबद्धताओं को जानते हैं, तो आइए हम इस लेख पर आगे बढ़ें 'git bisect' पर और आवेदन का परीक्षण करें।

आवेदन का परीक्षण करें

स्क्रिप्ट को इस रूप में चलाएँ - $./scripts/myApplication.sh[पहली बार परीक्षण]



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

बुरे कमिट की पहचान

खराब प्रतिबद्ध के लिए निरीक्षण शुरू करने के लिए, आप नीचे दिए गए चरणों का पालन करेंगे:

  • बिसेक्ट कमांड शुरू करें :गिट बिसात शुरू
  • खराब प्रतिबद्ध आईडी का उल्लेख करें: git bisect खराब HEADयाgit bisect c5b3ca8
  • अंतिम-ज्ञात-अच्छे आईडी का उल्लेख करें: git bisect अच्छा v1.0याgit bisect 93859d8

इससे अच्छे और बुरे कमिट के बीच प्रतिबद्ध इतिहास की सीमा लगभग मध्य हो जाती है जो हमें कमिट आईडी में लाती है: f61a7e8

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

एप्लिकेशन को चलाने के लिए कमांड : $./scripts/myApplication.sh[परीक्षण दूसरी बार]


आवेदन के बाद से बीतने के इस प्रतिबद्ध में, यह प्रतिबद्ध निश्चित रूप से खराब प्रतिबद्ध नहीं है। तो, अगला, आपको उसी के रूप में बिसक्ट कमांड को सूचित करना होगा - $git bisect अच्छा है


अब, यह खोज परिणाम को सीमा के पहले भाग तक सीमित कर देगा जैसा कि दिखाया गया है -


अपने आवेदन को फिर से टेस्ट करें - कमांड: $./scripts/myApplication.sh[तीसरी बार परीक्षण]


इसलिए, चूंकि हमें ऊपर के रूप में एक त्रुटि दिखाई देती है, यह एक खराब प्रतिबद्धता है।

बाइसक्ट कमांड को बताएं, $ चलाएंgit bisect खराब


यह आगे खोज को धीमा करता है और आपको अंतिम नीले घेरे वाले मध्य संशोधन में लाता है: a6ac769

इसलिए, मैं अपने एप्लिकेशन को एक ही कमांड का उपयोग करके अंतिम बार परीक्षण करता हूं: $./scripts/myApplication.sh[चौथी बार परीक्षण]

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

कमांड चलाएँ: git bisect खराब

खराब कमिटमेंट मिला

यह एकमात्र अंतिम प्रतिबद्ध बचा है जो बुरा है-


तो आप जानते हैं कि यह वह जगह है जहां कोड टूट गया। आगे क्या?

समझें कि किस फ़ाइल में बग था

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

यदि आप आगे डिबग करना चाहते हैं तो आपको इसकी आवश्यकता होगी पढ़ो आईडी वस्तु

आदेश: git show a6ac76994b3f6c7519204f910fc787b7928cf8f

यह कमिट ऑब्जेक्ट को पढ़ेगा और लॉग मैसेज और टेक्स्टुअल प्रिंट को प्रिंट करेगा।

आप यह भी विश्लेषण कर सकते हैं कि as गिट दोष 'कमांड का उपयोग यह विश्लेषण करने के लिए कि किस प्रकार और किस क्रम में प्रत्येक पंक्ति को किस लेखक द्वारा बदल दिया गया था, इस रूप में कमांड चलाएं:git दोष कोड / develop_nav.sh

खोज बंद करो

खोज को रोकने के लिए, निम्नलिखित कमांड का उपयोग करें:

आदेश: git bisect रीसेट करें


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

कोड को कैसे ठीक करें / डिबग करें?

खैर, कुछ वर्कअराउंड हैं जो आप प्रोजेक्ट की वर्तमान स्थिति को ठीक करने के लिए कर सकते हैं अब आपने उस कमिट को पहचान लिया है जो बग को पहले स्थान पर लाया था।
हालांकि, अगर आप एक पर एक कमेंट को बदल रहे हैं साझा भंडार यह सबसे अच्छा है वापस लौटना ‘का उपयोग कर परिवर्तन git रिवर्ट ‘कमांड।

कार्य: उल्लिखित खराब प्रतिबद्ध द्वारा किए गए परिवर्तनों को वापस लाएं

आदेश: git re6 a6ac769

नतीजतन, इस प्रतिबद्ध द्वारा किए गए परिवर्तनों को वापस करने से 2 चीजें हुईं:

  • इसने अंतिम 3 जोड़ी गई लाइनों (हरे रंग में संकेतित) को हटा दिया और हटाए गए लाइन (लाल रंग में संकेतित) को वापस जोड़ दिया। (a6ac769 के विपरीत)
  • संदेश की वापसी जानकारी के साथ एक अतिरिक्त प्रतिबद्ध बनाया

'रिवर्ट कमांड से मूल परिवर्तन से आपके द्वारा किए गए परिवर्तन को ट्रैक करना आसान हो जाता है'

उपयोग 'प्रदर्शन' ऑब्जेक्ट आईडी पढ़ने के लिए फिर से कमांड, जैसे-

आदेश: git शो 801f029

अब, आगे बढ़ो और आवेदन का परीक्षण करें। यह ठीक से निष्पादित करेगा।

आदेश: $./scripts/myApplication.sh

इसके विपरीत, यदि आप इतिहास से बुरी प्रतिबद्ध को हटाना चाहते हैं:

  • आप ‘का उपयोग कर सकते हैं गिट रीसेट The के साथ कमांड--कठिन“विकल्प (हालांकि एक साझा भंडार में अनुशंसित नहीं)।

  • The का उपयोग करके किसी एकल फ़ाइल के पुराने संस्करण की जाँच करेंगिट चेकआउट‘कमांड‘ के साथ-‘विकल्प।

यह ध्यान दिया जाना चाहिए, यह केवल आपके स्थानीय रिपॉजिटरी में परिवर्तन करेगा जब तक कि आप परिवर्तनों को दूरस्थ रिपॉजिटरी में नहीं धकेल देते। चूंकि कुछ बदलाव नई कमिट ऑब्जेक्ट आईडी बनाते हैं, जैसा कि हमारे मामले में ऊपर ऐसे मामलों में दूरस्थ रिपॉजिटरी के लिए एक सामान्य धक्का को खारिज कर दिया जाता है क्योंकि इतिहास को बदल दिया जाएगा। आपको ‘का उपयोग करना चाहिए जोर का धक्का ‘कमांड‘ के साथ- लागू करें‘विकल्प।

अपडेट 'मास्टर' शाखा

जबकि मैंने अपनी ’देव’ शाखा पर बग को ठीक कर लिया है, अब मैं इस परिवर्तन को ’मास्टर’ शाखा के साथ भी मिला सकता हूं-

  • 'मास्टर' पर जाएं, कमांड:गिट चेकआउट मास्टर
  • pull मूल / मास्टर ‘से, मास्टर’, कमांड के हालिया अपडेट को खींचें:git पुल उत्पत्ति
  • मर्ज 'देव' परिवर्तन, आदेश:git मर्ज विशाल

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

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

इसके अलावा, उप-क्षेत्र 'अच्छा' और 'बुरा' के अलावा, आप संशोधन की स्थिति का वर्णन करने के लिए नए और पुराने जैसे शब्दों का भी उपयोग कर सकते हैं। आप अलग-अलग कमीनों और संशोधन / प्रतिबद्ध आईडी पास करने के लिए अलग-अलग प्रतिबद्ध (वह -1) आईडी की पहचान करने के लिए कई बार कमांड चला सकते हैं। वैकल्पिक रूप से, इस आदेश का उपयोग करके टूटे हुए कोड को बनाने के लिए एक स्वचालित परीक्षण स्क्रिप्ट भी चलाई जा सकती है। साथ ही, रन करके इस कमांड का विस्तृत विवरण प्राप्त करेंgit बिसेक्ट --helpटर्मिनल पर। तो, दोस्तों इसके साथ हम Git Bisect के इस लेख के अंत में आते हैं।

DevOps का उद्देश्य टीमों के बीच अधिक संचार और सहयोग को आमंत्रित करते हुए बेहतर गुणवत्ता वाले सॉफ़्टवेयर को अधिक तेज़ी से और अधिक विश्वसनीयता के साथ बनाना है। यदि आप इस लेख द्वारा अंतर्ग्रही हैं, सी बाहर निकालो 250,000 से अधिक संतुष्ट शिक्षार्थियों के एक नेटवर्क के साथ एक विश्वसनीय ऑनलाइन शिक्षण कंपनी, एडुरेका द्वारा, दुनिया भर में फैली हुई है। Edureka DevOps प्रमाणन प्रशिक्षण पाठ्यक्रम शिक्षार्थियों को यह समझने में मदद करता है कि DevOps क्या है और विभिन्न DevOps प्रक्रियाओं में विशेषज्ञता प्राप्त करता है और कठपुतली, जेनकींस, नगिओस, Ansible, शेफ, साल्टस्टैक और GIT जैसे विभिन्न चरणों को SDLC में स्वचालित करने के लिए।

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया 'Git Bisect' लेख के टिप्पणी अनुभाग में इसका उल्लेख करें और हम आपको ASAP में वापस मिलेंगे।