परिचय Git द्विभाजित
करने के लिए "Git द्विभाजित" शुरू में थोड़ा भ्रमित कर सकते हैं। एक बार जब आप समझें कि यह क्या करता है, तो यह आसान होगा।
"गिट बिसेक्ट" के लिए सामान्य स्केनेरियो है: एक बग अभी खोजा गया था। आप यह जानना चाहते हैं कि किस संशोधन ने बग पेश किया था। आप जानते हैं कि नवीनतम संशोधन में बग मौजूद है, लेकिन इसे पूर्व संशोधन में पेश किया गया था। यह पता लगाने के लिए आपको एक तरीका चाहिए कि बग मौजूद है या नहीं। यह एक स्वचालित परीक्षण हो सकता है, या यह एक परीक्षण हो सकता है जिसे आप हाथ से चलाते हैं।
चलो शुरू करें। अपनी शाखा, इस मुद्दे के क्षेत्र में नवीनतम राजस्व से शुरू:
git bisect start
और फिर Git कि वर्तमान संस्करण बुरा माना जाता है बता:
git bisect bad
अब हम एक अच्छा राजस्व खोजने की जरूरत है। बग रखने के लिए पर्याप्त पुरानी चीज़ की जांच करें। यदि आपको लगता है कि 32 revs पहले, अच्छा हो चाहिए करने के लिए तो:
git checkout HEAD~32
और अगर यह बग को देखने के लिए अपने परीक्षण चलाते हैं। यदि इसमें बग है, तो आपको एक पुराने पुराने संशोधन की कोशिश करनी होगी (बस "गिट चेकआउट हेड ~ 32" जारी करें)।
git bisect good
कि Git कि वर्तमान संस्करण अच्छा है बताता है: जैसे ही आप एक रेव पर लैंड के रूप में बग तो नहीं है कि,। गिट तुरंत अच्छे संशोधन और खराब संशोधन के बीच एक संशोधन की जांच करेगा; आप उदाहरण के लिए उत्पादन देखेंगे,:
git bisect good # the test passed
git bisect bad # the test failed
git bisect skip # we can't run the test on this rev for some reason (doesn't compile, etc.)
: $ git bisect good
Bisecting: 7 revisions left to test after this (roughly 3 steps)
[909ba8cd7698720d00b2d10738f6d970a8955be4] Added convenience delegators to Cache
अपने परीक्षण चलाएँ, और परीक्षण के परिणाम, मुद्दा इन आदेशों में से एक पर निर्भर करता है
गिट भिन्नता में बदलना जारी रखेगा एनटी revs, और आप इसे अच्छा, बुरा या छोड़ना जारी रखेंगे। जब Git अंत में पता लगा लेता है जो राजस्व सभी मुसीबत शुरू कर दिया है, तो आप कुछ इस तरह मिल जाएगा:
b25ab3cee963f4738264c9c9b5a8d1a344a94623 is the first bad commit
commit b25ab3cee963f4738264c9c9b5a8d1a344a94623
Author: Wayne Conrad <[email protected]>
Date: Fri Dec 25 18:20:54 2009 -0700
More tests and refactoring
:040000 040000 6ff7502d5828598af55c7517fd9626ba019b16aa 39f346cb5a289cdb0955fcbba552f40e704b7e65 M routecalc
और अपने वर्तमान राजस्व नहीं होगा, पहले बुरा प्रतिबद्ध पर।
रनिंग Git "बंद हाथ"
द्विभाजित यदि आपकी परीक्षण स्वचालित है, तो आप Git सभी काम कर सकते हैं।ऊपर शुरू करने के लिए आपने जो कुछ किया है, वह करें:
git bisect start
git bisect bad
git checkout HEAD~32 # or however far back it takes to find a good rev
git bisect good
और अब जादू के लिए। आपको केवल एक परीक्षण कार्यक्रम है जो सफलता के लिए निकास कोड "0" और विफलता के लिए 1 (उदाहरण के लिए) देता है। "। Git बुरा द्विभाजित"
git bisect run tests/mytest.rb
Git अब, परीक्षण चलाने स्वचालित रूप से एक "Git अच्छा द्विभाजित" या एक करने के लिए परिणामों का उपयोग करेंगे: अपने परीक्षण के बारे में Git बताएँ यह तब तक जारी रहेगा जब तक कि बग पेश करने वाली प्रतिबद्धता नहीं मिलती। आपको बस बैठना है और देखना है।
जब आप
जब आप पूरा कर पूरा कर लें, मुद्दा:
git bisect reset
Git तुम वापस डाल देंगे तुम कहाँ शुरू कर दिया।
आप 'अच्छे' और 'बुरे' के लिए क्या तर्क पारित कर रहे हैं? क्या "बुरा" "अच्छा" प्रतिबद्धता का वंशज है? –
मुझे एक ही समस्या है। 'गिट बिस्कक्ट स्टार्ट' करने के बाद कोई आउटपुट नहीं है और फिर या तो 'गिट बिस्केट खराब' या 'गिट बिसेक्ट अच्छा' कर रहा है। 'git bisect visualize 'outputs' आपको कम से कम एक अच्छा और एक बुरा संशोधन देने की आवश्यकता है। (आप इसके लिए "गिट बिसेक्ट खराब" और "गिट बिसेक्ट अच्छा" का उपयोग कर सकते हैं।) इससे कोई फर्क नहीं पड़ता कि मैं कितनी बार 'गिट बिसेक्ट अच्छा' या 'गिट बिसेक्ट खराब' –