Git bisect: Πώς να εντοπίσετε ένα σφάλμα στον κωδικό σας;



Αυτό το άρθρο σχετικά με το git bisect, μάθετε πώς η εντολή 'git bisect' βοηθά στον εντοπισμό της πρώτης κακής δέσμευσης που εισάγει ένα σφάλμα χρησιμοποιώντας τον αλγόριθμο δυαδικής αναζήτησης.

Ο κώδικάς μου λειτούργησε καλά μέχρι χθες, αλλά όχι μέχρι μια πρόσφατη απόσυρση από το απομακρυσμένο αποθετήριο έσπασε τον κώδικα !!!

Εάν βρίσκεστε σε παρόμοια κατάσταση και δεν ξέρετε τι αλλάζει έσπασε τον κωδικό ή που από πολλούς συνεισφέροντες κατέχει Αυτό σφάλμα / χαρακτηριστικό , τότε το git bisect είναι η δική σας έξοδος. Έτσι, σε αυτό το άρθρο σχετικά με το git bisect θα μάθετε πώς το «git διχοτομή«Έρχεται η εντολή διάσωση στην ανίχνευση της πρώτης κακής δέσμευσης που εισάγει το σφάλμα χρησιμοποιώντας τον αλγόριθμο δυαδικής αναζήτησης.

Τα θέματα που καλύπτονται σε αυτό το άρθρο είναι τα εξής:





Γιατί να χρησιμοποιήσετε το git bisect;

Δεν υπάρχει αμφιβολία ότι τείνετε να δημιουργείτε μια σειρά δεσμεύσεων για κάθε μικρή αλλαγή . Σε ένα τέτοιο σενάριο, ο εντοπισμός σφαλμάτων του κώδικα γίνεται μια κουραστική εργασία, καθώς πρέπει να επιστρέψετε χειροκίνητα στο παρελθόν σε κάθε αναθεώρηση του στιγμιότυπου του έργου για να ελέγξετε τον κώδικα εργασίας και να εντοπίσετε το σφάλμα. Τώρα, αυτό γίνεται ακόμη περισσότερο συγκρότημα όταν έχετε δουλειά άλλου να επιθεωρήσετε χωρίς βασικό σημείο, επίσης να ζητήσετε από τον καθένα να καθαρίσει τα δικά του λάθη δεν ακούγεται πολύ εφικτό.
Κατά τη διάρκεια της πορείας, μπορείτε επίσης να δημιουργήσετε και να απορρίψετε έναν αριθμό κλάδων «χαρακτηριστικών» (ή επείγουσας επιδιόρθωσης) στη διαδικασία και να καταλήξετε να σπαταλάτε χρόνο και προσπάθεια ενώ αποκλίζετε από την κύρια γραμμή ανάπτυξης.



Έτσι, για να αποφύγετε τέτοια σενάρια, μπορείτε να χρησιμοποιήσετε τοgit διχοτομήεντολή για να βρείτε την κακή αναθεώρηση του έργου (ή στιγμιότυπο) και τελικά να το διορθώσετε με τοεπαναφορά gitεντολή.

Πώς γίνεται η αναζήτηση 'git bisect';



Αυτή η εντολή διχοτόμοι (χωρίζει) το ιστορικό σας μεταξύ του Καλός και το κακό διαπράττω εύρος. Σας δείχνει ρεύμα έργο κατάσταση σε ένα μεσαίου εύρους διαπράττω στιγμιότυπο. Η εντολή git bisect μετακινείται κάθε αναγνωριστικό δέσμευσης μεταξύ αυτού του εύρους ενώ παύση σε κάθε στιγμιότυπο για να το επιτρέψετε δοκιμάστε τον κωδικό . Εάν το σφάλμα υπάρχει, δηλώνετε τη δέσμευση ως κακό, αν όχι ως Καλός εκτός αν η αναζήτηση τελειώσει.

Σύνταξη

git διχοτομή

Για να κατανοήσουμε καλύτερα το 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 Bisect - Edureka

τι είναι λειτουργίες στο sql

Στη συνέχεια, ας δούμε το περιοδικό ιστορικού έργου για να δούμε τις δεσμεύσεις που έκανα για να δημιουργήσω αυτόν τον κώδικα-

Για παράδειγμα, μια απλή εντολή καταγραφής git εκτυπώνει λεπτομερώς το ιστορικό, ωστόσο, μου αρέσει να μορφοποιώ και να προσαρμόζω το ιστορικό. Έτσι, ας μας ορίστε ένα ψευδώνυμο - 'hist' χρησιμοποιώντας το git ψευδώνυμο εντολή όπως φαίνεται παρακάτω:

git alias.hist 'log --pretty = μορφή:'% C (κίτρινο)% h% Creset% ad | % C (πράσινο)% s% Creset% C (κόκκινο)% d% Creset% C (μπλε) [% an] '--graph --decorate --date = short'

Τώρα, πρόκειται να πραγματοποιήσω αυτήν τη δυνατότητα διόρθωσης σφαλμάτων σε ξεχωριστό κλάδο, ώστε να μην παρεμβαίνω στην κύρια ανάπτυξη του κλάδου «master». Για να το κάνετε αυτό, ακολουθήστε το παρακάτω σύνολο εντολών:

  • Δημιουργία υποκαταστήματος 'dev': [master] $git κλάδος dev
  • Εναλλαγή σε κλάδο 'dev': $git checkout dev
  • Καταγράψτε τα αρχεία καταγραφής ιστορικού: [dev] $πηγαίνετε στο ιστορικό[Σημείωση: η εντολή «ψευδώνυμο» χρησιμοποιείται εδώ]

Επιπλέον, έχω επισημάνει την τελευταία γνωστή καλή δέσμευση που γνωρίζω στην οποία το σενάριό μου λειτούργησε καλά με τα αναμενόμενα αποτελέσματα της δοκιμαστικής περίπτωσης, αυτό το στιγμιότυπο δέσμευσης είναι με ετικέτα ως v1.0.

Έτσι, τώρα που γνωρίζουμε την τελευταία καλή δέσμευσή μας, ας προχωρήσουμε σε αυτό το άρθρο σχετικά με το 'git bisect' και δοκιμάσουμε την εφαρμογή.

Δοκιμάστε την εφαρμογή

Εκτελέστε το σενάριο ως - $./scripts/myApplication.sh[δοκιμή πρώτη φορά]



Είναι σαφές ότι η τρέχουσα κατάσταση του έργου μου είναι λάθος , και δεν είμαι σίγουρος ποια αλλαγή έκανα σε ποια δέσμευση που εισήγαγε αυτήν την αλλαγή. Έτσι, στη συνέχεια σε αυτό το άρθρο σχετικά με το git bisect, ας δούμε πώς να εντοπίσουμε την κακή δέσμευση.

Προσδιορισμός της κακής δέσμευσης

Για να ξεκινήσετε την επιθεώρηση για την κακή δέσμευση, θα ακολουθήσετε τα παρακάτω βήματα:

  • Ξεκινήστε την εντολή bisect :git bisect έναρξη
  • Αναφέρετε το αναγνωριστικό κακής δέσμευσης: git διχοτομήστε το κακό HEADήgit bisect c5b3ca8
  • Αναφέρετε το τελευταίο αναγνωριστικό-καλά-δεσμευτικό αναγνωριστικό: git bisect καλό v1.0ήgit bisect 93859d8

Αυτό διχοτομεί το εύρος ιστορικών δεσμεύσεων περίπου στο μέσο μεταξύ των καλών και των κακών δεσμεύσεων που μας φέρνει στο αναγνωριστικό δέσμευσης: f61α7ε8

Ως εκ τούτου, η εντολή έχει ελέγξει την έκδοση του έργου όπως ήταν σε αυτό το αναγνωριστικό δέσμευσης. Τώρα, ας προχωρήσουμε και δοκιμάστε ξανά την εφαρμογή μας.

Εντολή για την εκτέλεση της εφαρμογής : $./scripts/myApplication.sh[δοκιμή δεύτερη φορά]


Από την εφαρμογή πέρασε σε αυτήν τη δέσμευση, αυτή η δέσμευση δεν είναι σίγουρα η κακή δέσμευση. Έτσι, στη συνέχεια, πρέπει να ενημερώσετε το ίδιο με την εντολή bisect όπως - $git bisect καλό


Τώρα, αυτό θα περιορίσει περαιτέρω το αποτέλεσμα αναζήτησης στο πρώτο μισό του εύρους όπως φαίνεται -


Δοκιμάστε ξανά την εφαρμογή σας - Εντολή: $./scripts/myApplication.sh[δοκιμή για τρίτη φορά]


Έτσι, δεδομένου ότι βλέπουμε ένα σφάλμα όπως παραπάνω, αυτό είναι μια κακή δέσμευση.

Ενημερώστε την εντολή bisect, εκτελέστε $git bisect κακο


Αυτό περιορίζει περαιτέρω την αναζήτηση και σας φέρνει στην τελευταία μπλε μεσαία αναθεώρηση: α6ac769

Έτσι, δοκιμάζω την εφαρμογή μου για τελευταία φορά χρησιμοποιώντας την ίδια εντολή: $./scripts/myApplication.sh[δοκιμή τέταρτη φορά]

Τώρα, δεδομένου ότι η εφαρμογή απέτυχε ξανά, εξακολουθεί να είναι μια κακή δέσμευση. Λοιπόν, ας εκτελέσουμε την ακόλουθη εντολή:

Εκτελέστε την εντολή: git bisect κακο

Βρέθηκε κακή δέσμευση

Αυτό καταλήγει στο συμπέρασμα ότι η μόνη τελευταία αριστερή δέσμευση είναι κακή


Γνωρίζετε λοιπόν ότι εκεί έσπασε ο κωδικός. Ποιο είναι το επόμενο?

Κατανοήστε τι αρχείο είχε το σφάλμα

Σε αυτήν την περίπτωση, η έξοδος σας δίνει ελάχιστες πληροφορίες σχετικά με το δεσμεύστε το αναγνωριστικό , όνομα συγγραφέα , και το ημερομηνία συγγραφής μαζί με δεσμεύστε το μήνυμα και το μονοπάτι που τροποποιήθηκε.

Εάν θέλετε να κάνετε περαιτέρω εντοπισμό σφαλμάτων πρέπει να το κάνετε ανάγνωση ο αντικείμενο id id .

Εντολή: git show a6ac76994b3f6c7519204f910fc787b7928cf8ef

Αυτό θα διαβάσει το αντικείμενο δέσμευσης και θα εκτυπώσει το μήνυμα καταγραφής και το κείμενο διαφορά.

Μπορείτε επίσης να χρησιμοποιήσετε την εντολή 'git blame' για να αναλύσετε πώς και σε ποια δέσμευση κάθε γραμμή άλλαξε από ποιον συντάκτη, εκτελέστε την εντολή ως:git blame code / αναπτύξτε_nav.sh

Σταματήστε την αναζήτηση

Για να σταματήσετε την αναζήτηση, χρησιμοποιήστε την ακόλουθη εντολή:

Εντολή: επαναφορά git bisect


Έτσι, η διαδικασία διχοτόμησης σταματά και επιστρέφετε στον κλάδο από τον οποίο ξεκινήσατε την αναζήτηση. Τώρα, το επόμενο βήμα είναι να διορθώσετε ή να διορθώσετε τον κώδικα.

Πώς να διορθώσετε / διορθώσετε τον κώδικα;

Λοιπόν, υπάρχουν μερικές λύσεις που θα μπορούσατε να κάνετε για να διορθώσετε την τρέχουσα κατάσταση του έργου τώρα που έχετε εντοπίσει τη δέσμευση που έφερε το σφάλμα στην πρώτη θέση.
Ωστόσο, εάν αλλάζετε μια δέσμευση για ένα κοινόχρηστο αποθετήριο είναι καλύτερο να επαναστρέφω η αλλαγή χρησιμοποιώντας το « επαναφορά git ' εντολή.

Εργο: Επαναφέρετε τις αλλαγές που έγιναν από την κακή δέσμευση που αναφέρεται

Εντολή: git revert a6ac769

Ως αποτέλεσμα, η επαναφορά των αλλαγών που έγιναν με αυτήν την δέσμευση έκανε 2 πράγματα:

  • Διαγράφει τις τελευταίες 3 προστιθέμενες γραμμές (υποδεικνύονται με πράσινο χρώμα) και πρόσθεσε τη διαγραμμένη γραμμή (επισημαίνεται με κόκκινο χρώμα) πίσω. (αντίστροφη του a6ac769)
  • Δημιουργήθηκε μια επιπλέον δέσμευση με τις πληροφορίες μηνύματος επαναφοράς

'Η εντολή επαναφοράς διευκολύνει επίσης την παρακολούθηση της αλλαγής που επαναφέρατε από την αρχική δέσμευση'

Χρησιμοποιήστε το 'προβολή' εντολή ξανά για να διαβάσετε το αναγνωριστικό αντικειμένου, όπως

Εντολή: git show 801f029

Τώρα, προχωρήστε και δοκιμάστε την εφαρμογή. Θα εκτελεστεί σωστά.

Εντολή: $./scripts/myApplication.sh

Αντίθετα, εάν θέλετε να καταργήσετε την κακή δέσμευση από το ιστορικό:

  • Θα μπορούσατε να χρησιμοποιήσετε το « επαναφορά git «Εντολή με το«--σκληρόςΕπιλογή (αν και δεν συνιστάται σε κοινόχρηστο αποθετήριο).

  • Ρίξτε μια ματιά σε μια παλαιότερη έκδοση ενός αρχείου χρησιμοποιώντας το «git ολοκλήρωση αγοράς'Εντολή με το'-«Επιλογή.

Θα πρέπει να σημειωθεί, αυτό θα κάνει αλλαγές μόνο στο τοπικό αποθετήριο σας έως ότου ωθήσετε τις αλλαγές σε απομακρυσμένο αποθετήριο. Δεδομένου ότι ορισμένες αλλαγές δημιουργούν νέο αναγνωριστικό αντικειμένου δέσμευσης, όπως στην παραπάνω περίπτωση, σε τέτοιες περιπτώσεις απορρίπτεται μια κανονική ώθηση στο απομακρυσμένο αποθετήριο, καθώς το ιστορικό θα είχε αποκλίνει. Πρέπει να χρησιμοποιήσετε το σκατά 'Εντολή με το'--δύναμη«Επιλογή.

Ενημέρωση κλάδου «κύριος»

Ενώ έχω διορθώσει το σφάλμα στον κλάδο «dev», τώρα μπορώ να συγχωνεύσω αυτήν την αλλαγή με τον κλάδο «master» επίσης

  • μεταβείτε στο 'master', εντολή:git master checkout
  • τραβήξτε τις πρόσφατες ενημερώσεις από 'origin / master' σε 'master', εντολή:git pull origin
  • συγχώνευση αλλαγών 'dev', εντολή:git merge giant

Ωστόσο, η συγχώνευση ενδέχεται να δημιουργήσει διενέξεις εάν υπάρχουν περισσότερες δεσμεύσεις από το απομακρυσμένο αποθετήριο. Επίλυση διενέξεων και συνέχιση της συγχώνευσης.
Τέλος, σπρώξτε μόνο το σταθερό υποκατάστημα «master» που δεσμεύεται στο απομακρυσμένο αποθετήριο ενώ ολοκληρώνετε τη βρώμικη εργασία σας (σφάλμα, δυνατότητες, βελτιώσεις) μόνο στους κλάδους χαρακτηριστικών όπως «dev» σε αυτό το παράδειγμα.
Επιπλέον, είναι καλύτερο να υιοθετήσετε μια λογική στρατηγική διακλάδωσης για να βελτιστοποιήσετε και να ασφαλίσετε τη διαδικασία ροής εργασίας του git.

Συνοψίζοντας, το 'git bisect' είναι μια εύχρηστη και χρήσιμη εντολή που γρήγορα αναγνωρίζω ο δεσμεύστε το αναγνωριστικό ότι εισήχθη προς το σφάλμα στον τρέχοντα κωδικό σας με τη βοήθεια ενός εκτεταμένου δυαδική αναζήτηση από λογικά διαιρώντας το αρχείο καταγραφής δεσμεύει στη μέση μεταξύ του Καλός και κακό διαπράττω εύρος . Εν κατακλείδι, το μάθατε ανιχνεύουν η ελαττωματική δέσμευση και επαναστρέφω η αλλαγή που έκανε.

Επιπλέον, για τις δευτερεύουσες εντολές «καλό» και «κακό» μπορείτε επίσης να χρησιμοποιήσετε όρους όπως νέους και παλιούς για να περιγράψετε την κατάσταση αναθεώρησης. Μπορείτε να εκτελέσετε την εντολή πολλές φορές περνώντας διαφορετικές υπο-εντολές και αναθεωρητικά / δεσμευτικά αναγνωριστικά για να εντοπίσετε διαφορετικά αναγνωριστικά comm (she-1). Εναλλακτικά, ένα αυτοματοποιημένο δοκιμαστικό σενάριο μπορεί επίσης να εκτελεστεί για τη δημιουργία του σπασμένου κώδικα χρησιμοποιώντας αυτήν την εντολή. Επίσης, βρείτε μια λεπτομερή περιγραφή αυτής της εντολής εκτελώνταςgit bisect - βοήθειαστο τερματικό. Λοιπόν, οι άνθρωποι με αυτό καταλήγουμε σε αυτό το άρθρο σχετικά με το Git Bisect.

Η πρόθεση του DevOps είναι να δημιουργήσουμε λογισμικό καλύτερης ποιότητας πιο γρήγορα και με μεγαλύτερη αξιοπιστία, ενώ ταυτόχρονα προσκαλούμε μεγαλύτερη επικοινωνία και συνεργασία μεταξύ ομάδων. Εάν σας ενδιαφέρει αυτό το άρθρο, γ τσεκάρετε το από την Edureka, μια αξιόπιστη διαδικτυακή εταιρεία εκμάθησης με δίκτυο περισσότερων από 250.000 ικανοποιημένων μαθητών σε όλο τον κόσμο. Το μάθημα Εκπαίδευσης Πιστοποίησης Edureka DevOps βοηθά τους μαθητές να κατανοήσουν τι είναι DevOps και να αποκτήσουν εμπειρία σε διάφορες διαδικασίες και εργαλεία DevOps, όπως Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack και GIT για την αυτοματοποίηση πολλαπλών βημάτων στο SDLC.

Έχετε μια ερώτηση για εμάς; Παρακαλώ αναφέρετέ το στην ενότητα σχολίων του άρθρου 'Git Bisect' και θα επικοινωνήσουμε μαζί σας το συντομότερο δυνατόν.