Git
दोष लगाना / दोषपूर्ण खोजना
खोज…
वाक्य - विन्यास
git bisect <subcommand> <options>
git bisect start <bad> [<good>...]
git bisect reset
git bisect good
git bisect bad
द्विआधारी खोज (git bisect)
git bisect
आपको वह खोज करने की अनुमति देता है जो एक बाइनरी खोज का उपयोग करते हुए बग को पेश करती है।
दो प्रतिबद्ध संदर्भ प्रदान करके सत्र की शुरुआत करें: बग से पहले एक अच्छी प्रतिबद्धता, और बग के बाद एक खराब प्रतिबद्धता। आम तौर पर, खराब प्रतिबद्धता HEAD
।
# start the git bisect session
$ git bisect start
# give a commit where the bug doesn't exist
$ git bisect good 49c747d
# give a commit where the bug exist
$ git bisect bad HEAD
git
एक बाइनरी खोज शुरू करता है: यह संशोधन को आधे में विभाजित करता है और रिपॉजिटरी को मध्यवर्ती संशोधन में बदल देता है। यह निर्धारित करने के लिए कोड का निरीक्षण करें कि क्या संशोधन अच्छा या बुरा है:
# tell git the revision is good,
# which means it doesn't contain the bug
$ git bisect good
# if the revision contains the bug,
# then tell git it's bad
$ git bisect bad
git
आपके निर्देशों के आधार पर खराब संशोधनों के प्रत्येक शेष सबसेट पर बाइनरी खोज को चलाता रहेगा। git
एक एकल संशोधन पेश करेगा, जब तक कि आपके झंडे गलत नहीं थे, ठीक उसी संशोधन का प्रतिनिधित्व करेंगे जहां बग पेश किया गया था।
बाद में बिट्स सत्र समाप्त करने और HEAD पर वापस जाने के लिए git bisect reset
चलाना याद रखें।
$ git bisect reset
यदि आपके पास एक स्क्रिप्ट है जो बग की जांच कर सकती है, तो आप इस प्रक्रिया को स्वचालित कर सकते हैं:
$ git bisect run [script] [arguments]
जहां [script]
आपकी लिपि का मार्ग है और [arguments]
वह कोई भी तर्क जो आपकी लिपि को दिया जाना चाहिए।
इस कमांड को चलाना बाइनरी सर्च के माध्यम से स्वचालित रूप से चलेगा, जो आपकी स्क्रिप्ट के एक्जिट कोड के आधार पर प्रत्येक चरण में git bisect good
या git bisect bad
को निष्पादित करेगा। 0 के साथ बाहर निकलना good
इंगित करता good
, जबकि 1-124, 126, या 127 के साथ बाहर निकलना बुरा दर्शाता है। 125 इंगित करता है कि स्क्रिप्ट उस संशोधन का परीक्षण नहीं कर सकती है (जो git bisect skip
को ट्रिगर करेगा)।
अर्ध स्वचालित रूप से एक दोषपूर्ण प्रतिबद्ध पाते हैं
कल्पना कीजिए कि आप master
ब्रांच पर हैं और कुछ उम्मीद के मुताबिक काम नहीं कर रहा है। आप सभी जानते हैं, कि पिछले रिलीज में काम कर रहा था (जो कि उदाहरण के लिए, टैग किया गया था या आप कमिट हैश जानते हैं, यहां old-rel
ले सकते हैं)।
गिट ने आपके लिए मदद की है, दोषपूर्ण कमिटमेंट का पता लगाया है जिसने बहुत कम संख्या में चरणों (द्विआधारी खोज) के साथ प्रतिगमन की शुरुआत की।
सबसे पहले बायसेक्टिंग शुरू करें:
git bisect start master old-rel
यह गिट को बताएगा कि master
एक टूटा हुआ संशोधन (या पहला टूटा हुआ संस्करण) और old-rel
अंतिम ज्ञात संस्करण है।
Git अब दोनों कमिट्स के बीच में एक अलग सिर की जांच करेगा। अब, आप अपना परीक्षण कर सकते हैं। यह निर्भर करता है कि यह काम करता है या नहीं
git bisect good
या
git bisect bad
। यदि यह प्रतिबद्ध नहीं है, तो आप आसानी से git reset
कर सकते हैं और परीक्षण कर सकते हैं कि एक, गिट विल इस बात का ध्यान रखेगा।
कुछ चरणों के बाद गिट दोषपूर्ण हैश का उत्पादन करेगा।
बस जारी करने के लिए bisect प्रक्रिया को निरस्त करने के लिए
git bisect reset
और git पिछली स्थिति को बहाल करेगा।