2010-01-12 16 views
10

मैंने हाल ही में git bisect का उपयोग करने की कोशिश की, लेकिन यह अभी काम नहीं कर सका। पेड़ मास्टर में बना रहा और मैंने git bisect से कोई आउटपुट नहीं देखा। यहाँ मैं क्या करने की कोशिश की है या नहीं:गिट बिसेक्ट काम नहीं करता है, आउटपुट

git bisect start 
git bisect bad # no output, tried a couple of times 
git bisect good # no output 
git bisect reset #-> Already on 'master' 

मैं दो अलग अलग रेपोस पर इस कोशिश की। काम नहीं किया गिट --वर्जन 1.6.3.3 उबंटू 9 .10 पर कोई विचार है?

+0

आप 'अच्छे' और 'बुरे' के लिए क्या तर्क पारित कर रहे हैं? क्या "बुरा" "अच्छा" प्रतिबद्धता का वंशज है? –

+0

मुझे एक ही समस्या है। 'गिट बिस्कक्ट स्टार्ट' करने के बाद कोई आउटपुट नहीं है और फिर या तो 'गिट बिस्केट खराब' या 'गिट बिसेक्ट अच्छा' कर रहा है। 'git bisect visualize 'outputs' आपको कम से कम एक अच्छा और एक बुरा संशोधन देने की आवश्यकता है। (आप इसके लिए "गिट बिसेक्ट खराब" और "गिट बिसेक्ट अच्छा" का उपयोग कर सकते हैं।) इससे कोई फर्क नहीं पड़ता कि मैं कितनी बार 'गिट बिसेक्ट अच्छा' या 'गिट बिसेक्ट खराब' –

उत्तर

16

परिचय 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 तुम वापस डाल देंगे तुम कहाँ शुरू कर दिया।

+0

'गिट बिसेक्ट रन' जारी रखता हूं, तब तक चलना जारी रहेगा प्रतिबद्ध है कि बग पेश करता है पाया जाता है। पहले खराब संशोधन तक नहीं। – Lorenz

+0

@Lorenz, मेरा मतलब पहले प्रतिबद्धता के क्रम में था, पहले bisect द्वारा चेक नहीं किया गया था। मैं मानता हूं कि शब्द संदिग्ध है - अच्छी पकड़। मैं इसे अपडेट करूंगा। –

+0

यह एक परिचय है कि कैसे गिट बिस्केट काम करता है और समस्या का उत्तर नहीं। समस्या यह है कि सामान्य निर्देशों के वर्णन के रूप में इसका उपयोग करने के बावजूद गिट bisect ठीक से काम नहीं कर रहा है। हालांकि यह एक अच्छा परिचय है। –

1

आपने जो कोशिश की वह विफल रही क्योंकि आपने यह कहा था कि वही वृक्ष दोनों अच्छे और बुरे थे। जो स्पष्ट रूप से कोई मतलब

git bisect start # tells git you want to do a bisect operation 
git bisect bad # tells git the current treesh (HEAD) is bad 
git bisect good # tells git the current treeish (HEAD) is good 

नहीं है क्योंकि किसी दिए गए treeish संभवतः अच्छा नहीं हो सकता है और बुरा Git बस मान लिया गया है कि आप अपने आप को सही किया गया।

यहां कुंजी यह है कि यदि आप एक वृक्षारोपण गिट निर्दिष्ट नहीं करते हैं तो आप वर्तमान का मतलब मानते हैं।

ऐसा करने का एक बेहतर तरीका सबसे पहले प्रतिबद्धता के पेड़ को ढूंढना होगा जहां चीजें काम करती हैं। तो ...

git bisect start 
git bisect bad # tells it HEAD is bad 
git bisect good abc123 # treeish of the good commit 

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

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