Jei esate panašioje situacijoje ir nežinote koks pokytis sulaužė kodą arba PSO iš daugelio prisidedančiųjų priklauso tai klaida / funkcija , tada „git bisect“ yra jūsų išeitis. Taigi, šiame straipsnyje apie „git bisect“ sužinosite, kaipgit dvipusis
‘Ateina komanda gelbėjimas nustatant pirmąjį blogą įsipareigojimą, kuris pateikia klaidą naudodamas dvejetainio paieškos algoritmą.
Šiame straipsnyje aptariamos šios temos:
kaip padaryti failą Java
Kodėl verta naudoti git bisect?
Nėra jokių abejonių dėl to, kad esate linkęs sukurti daugybę įsipareigojimų kiekvienam nedideliam pasikeitimui . Tokiu atveju derinimas su kodu tampa varginančia užduotimi, nes jūs turite rankiniu būdu grįžti laiku į kiekvieną projekto momentinės nuotraukos peržiūrą, kad išbandytumėte veikiantį kodą ir aptiktumėte klaidą. Dabar tai dar daugiau kompleksas kai jūs turite kito darbo, kurį norite patikrinti be pagrindinio taško, taip pat paprašyti kiekvieno išvalyti savo klaidas, taip pat skamba nelabai įmanoma.
Be to, jūs taip pat galite sukurti ir išmesti keletą „funkcinių“ (arba karštųjų pataisų) šakų šiame procese ir galų gale sugaišti laiką ir pastangas, nukrypstant nuo pagrindinės vystymosi linijos.
Taigi, norėdami išvengti tokių scenarijų, galite naudotigit dvipusis
komandą surasti blogą projekto pataisą (arba momentinę nuotrauką) ir galiausiai ją ištaisyti naudojantgit grįžti
komandą.
Kaip ieškoma „git bisect“?
Ši komanda dalijasi pusiau (padalija) savo istoriją tarp Gerai ir blogai įsipareigoti diapazonas. Tai rodo tavo srovė projektą valstija į a vidutinės klasės įsipareigoti momentinė nuotrauka. Tada pereinama „git bisect“ komanda kiekvieno įsipareigojimo ID tarp šio diapazono, kol stabtelėjęs kiekvienoje momentinėje nuotraukoje, kad galėtumėte tai padaryti išbandyti kodą . Jei klaida yra, jūs paskelbiate įsipareigojimą kaip blogai, jei ne kaip Gerai nebent paieška baigsis.
Sintaksė
git dvipusis
Norėdami geriau suprasti „git bisect“, sukurkime projektą, kuriame sukurtas paprastos navigacijos programos, naudojamos automobilyje, kodas.
Pradinė projekto sąranka
Norėdami sukurti projektą, kuriame sukurtas paprastos navigacijos programos, naudojamos automobilyje, kodas, galite atlikti šiuos veiksmus:
1 žingsnis: Sukurkite naują katalogą savo aplanke $ HOME:
cd $ HOME mkdir my_nav_app
2 žingsnis: Eikite į naują katalogą:
cd $ my_nav_app
3 žingsnis: Klonuokite ir atsisiųskite projektą iš mano „GitHub“ puslapio:
„git“ klonas https://github.com/divyabhushan/my_nav_app.git
Dabar supraskime projektų katalogus ir failų išdėstymą, išspausdintus komanda:ls -lTR
Tada pažiūrėkime apie projekto istorijos žurnalą, kad peržiūrėtume įsipareigojimus, kuriuos padariau norėdamas sugeneruoti šį kodą.
Pavyzdžiui, paprasta „git log“ komanda išsamiai išspausdina istoriją, tačiau man patinka gražiai formatuoti ir pritaikyti istoriją. Taigi leisk mums nustatyti slapyvardį - „hist“ naudojant git pseudonimas komanda, kaip parodyta žemiau:
git alias.hist 'log --pretty = format:'% C (geltona)% h% Creset% ad | % C (žalia)% s% Creset% C (raudona)% d% Creset% C (mėlyna) [% an] '--graph --decorate --date = short'
Dabar aš atliksiu šią klaidų taisymo funkciją atskirame filiale, kad netrukdyčiau pagrindinei „pagrindinio“ šakos plėtrai. Norėdami tai padaryti, vykdykite toliau nurodytą komandų rinkinį:
- Sukurti filialą „dev“: [meistras] $
git filialas dev
- Perjungti į „dev“ filialą: $
git checkout dev
- Išvardykite istorijos žurnalus: [dev] $
eiti hist
[Pastaba: čia naudojama „alias“ komanda]
Be to, aš pabrėžiau paskutinį žinomą gerą įsipareigojimą, kurį žinau, kai mano scenarijus veikė gerai, su tikėtinais bandymų atvejais. Šis įsipareigojimų momentinis vaizdas yra pažymėta kaip v1.0.
Taigi, dabar, kai žinome savo paskutinį gerą įsipareigojimą, eikime į priekį šiame straipsnyje apie „git bisect“ ir išbandykite programą.
Išbandykite programą
Paleiskite scenarijų kaip - $./scripts/myApplication.sh
[bandymas pirmą kartą]
Aišku, mano dabartinė projekto būsena yra klaida , ir aš nesu tikras, kokį pasikeitimą padariau atlikdamas įsipareigojimą. Taigi, šiame straipsnyje apie „git bisect“, pažiūrėkime, kaip nustatyti blogą įsipareigojimą.
Blogo įsipareigojimo nustatymas
Norėdami pradėti tikrinti, ar nėra blogo įsipareigojimo, atlikite šiuos veiksmus:
- Paleiskite komandą bisect :
git bisect start
- Paminėkite blogo įsipareigojimo ID:
git pusiau bloga GALVA
arbagit bisect c5b3ca8
- Paminėkite paskutinį žinomą gero įsipareigojimo ID:
„git“ padalykite į dvi dalis gerą v1.0
arba„git bisect“ 93859d8
Tai padalija įsipareigojimų istorijos intervalą maždaug pusiaukelėje tarp gerų ir blogų įsipareigojimų, kurie mus atveda prie įsipareigojimų ID: f61a7e8
Vadinasi, komanda patikrino projekto versiją, kuri buvo šiame įsipareigojimų ID. Dabar leiskite mums tęsti ir dar kartą išbandyti savo paraišką.
Komanda paleisti programą : $./scripts/myApplication.sh
[bandymas antrą kartą]
Nuo taikymo praėjo šiame įsipareigojime šis įsipareigojimas tikrai nėra blogas įsipareigojimas. Taigi, jūs turite pranešti tą patį komandai bisect kaip - $git bisect geras
Dabar tai dar labiau susiaurins paieškos rezultatus į pirmąją diapazono pusę, kaip parodyta -
Dar kartą išbandykite savo programą - komanda: $./scripts/myApplication.sh
[bandymas trečią kartą]
Taigi, kadangi matome klaidą, kaip nurodyta aukščiau, tai yra blogas įsipareigojimas.
Praneškite komandai bisect, paleiskite $git bisect blogas
Tai dar labiau susiaurina paiešką ir patenka į paskutinį mėlyną apjuostą vidurinį pakeitimą: a6ac769
Taigi paskutinį kartą išbandau savo programą naudodamas tą pačią komandą: $./scripts/myApplication.sh
[bandymas ketvirtą kartą]
Kadangi programa vėl nepavyko, tai vis tiek yra blogas įsipareigojimas. Taigi leidžia paleisti šią komandą:
Paleiskite komandą: git bisect blogas
Rastas blogas įsipareigojimas
Tai užbaigia vienintelį likusį blogą įsipareigojimą
Taigi žinote, kad čia sugedo kodas. Kas toliau?
Supraskite, kokiame faile buvo klaida
Tokiu atveju išvestis suteikia jums minimalią informaciją apie įsipareigoti ID , autoriaus vardas , ir autoriaus data kartu su įvykdyti pranešimą ir kelias kad buvo modifikuota.
Jei norite toliau derinti, jums reikia skaityti įvykdyti id objektą .
Komanda: „git show“ a6ac76994b3f6c7519204f910fc787b7928cf8ef
Taip bus perskaitytas „object“ objektas ir išspausdintas žurnalo pranešimas ir teksto diff.
Taip pat galite naudoti komandą „git blame“, kad išanalizuotumėte, kaip ir kuriame įsipareigojime kiekvienas autorius pakeitė kiekvieną eilutę, vykdykite komandą taip:„git“ kaltinimo kodas / develop_nav.sh
Sustabdykite paiešką
Norėdami sustabdyti paiešką, naudokite šią komandą:
Komanda: git bisect reset
Taigi pjovimo procesas yra sustabdytas ir jūs vėl esate filiale, nuo kurio pradėjote paiešką. Dabar kitas žingsnis yra pataisyti arba derinti kodą.
Kaip pataisyti / derinti kodą?
Na, yra keli būdai, kuriuos galėtumėte padaryti, kad išspręstumėte dabartinę projekto būklę dabar, kai nustatėte įsipareigojimą, kuris pirmiausia atnešė klaidą.
Tačiau, jei keičiate įsipareigojimą dėl bendra saugykla tai geriausia grįžti pakeitimas naudojant „ git grįžti ‘Komanda.
Užduotis: Grąžinkite minėto blogo įsipareigojimo atliktus pakeitimus
Komanda: git revert a6ac769
Todėl šio įsipareigojimo pakeitimų atšaukimas padarė 2 veiksmus:
- Jis ištrynė paskutines 3 pridėtas eilutes (pažymėtas žalia spalva) ir pridėjo ištrintas eilutes (nurodytas raudonai) atgal. (atvirkštinė a6ac769)
- Sukurtas papildomas įsipareigojimas su pranešimo grąžinimo informacija
„Grąžinti komandą taip pat lengviau sekti pakeitimą, kurį grąžinote iš pradinio įsipareigojimo“
Naudoti 'Rodyti' komandą dar kartą perskaityti objekto ID, pvz.,
Komanda: git šou 801f029
Dabar eikite į priekį ir išbandykite programą. Tai bus tinkamai vykdoma.
Komanda: $./scripts/myApplication.sh
kas yra „sqlite“ naršyklė
Priešingai, jei norite pašalinti blogą įsipareigojimą iš istorijos:
Galite naudoti
git atstatyti
„Komanda su„--sunku
“(Nors nerekomenduojama bendroje saugykloje).Patikrinkite ankstesnę vieno failo versiją naudodami „
git kasa
„Komanda su„-
‘Variantas.
Reikėtų pažymėti, kad tai pakeis jūsų vietinę saugyklą tik tol, kol nustumsite pakeitimus į nuotolinę saugyklą. Kadangi kai kurie pakeitimai sukuria naują įsipareigojimo objekto ID, kaip ir anksčiau, tokiais atvejais įprastas nuotolinės saugyklos siuntimas atmetamas, nes istorija būtų išsiskyrusi. Turite naudoti „ git stumti
„Komanda su„- jėga
‘Variantas.
Atnaujinkite „pagrindinį“ filialą
Nors aš pašalinau klaidą savo „dev“ šakoje, dabar taip pat galiu sujungti šį pakeitimą su „master“ filialu.
- pereiti į „master“, komanda:
git kasos meistras
- traukite naujausius naujinimus iš „origin / master“ į „master“, komanda:
git pull kilmė
- sujungti „dev“ pakeitimus, komanda:
git sulieti milžinas
Tačiau sujungus gali kilti konfliktų, jei yra daugiau įsipareigojimų iš nuotolinės saugyklos. Išspręskite konfliktus ir tęskite susijungimą.
Galiausiai stumkite tik stabilų „pagrindinį“ filialą, kuris įsipareigoja nuotolinei saugyklai, o jūsų nešvarus darbas (klaida, funkcijos, patobulinimai) atliekamas tik tose funkcijų šakose, kaip „dev“ šiame pavyzdyje.
Be to, geriausia priimti logišką šakojimosi strategija supaprastinti ir apsaugoti savo „git“ darbo eigos procesą.
Apibendrinant, 'git bisect' yra patogi ir naudinga komanda, kuri greitai nustatyti įsipareigoti ID kad įvesta į kaltė savo bėgimo kodą, naudodamas išsamų dvejetainė paieška logiškai dalijantis įsipareigojimų žurnalai pusiaukelėje tarp Gerai ir blogai įsipareigoti diapazonas . Pabaigai jūs išmokote aptikti ydingas įsipareigojimas ir grįžti jo padarytą pakeitimą.
Be pakomandžių „geras“ ir „blogas“, pataisymo būsenai apibūdinti taip pat galite naudoti tokius terminus kaip naujas ir senas. Galite kelis kartus paleisti komandą, perduodami skirtingus pakomandžius ir pataisymo / vykdymo ID, kad nustatytumėte skirtingus įsipareigojimų (she-1) ID. Arba taip pat galima paleisti automatinį bandomąjį scenarijų, kad būtų sukurtas sugadintas kodas naudojant šią komandą. Be to, paleisdami raskite išsamų šios komandos aprašymągit bisect - pagalba
terminale. Taigi, žmonės, tuo užsiėmę, baigėme šį straipsnį apie „Git Bisect“.
„DevOps“ tikslas yra greičiau ir patikimiau sukurti geresnės kokybės programinę įrangą, tuo pačiu pakviečiant didesnį komandų bendravimą ir bendradarbiavimą. Jei jus domina šis straipsnis, c Heck out sukūrė patikima internetinė mokymosi įmonė „Edureka“, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą visame pasaulyje. „Edureka DevOps“ sertifikavimo mokymo kursas padeda besimokantiesiems suprasti, kas yra „DevOps“, ir įgyti patirties įvairiuose „DevOps“ procesuose ir įrankiuose, pvz., „Puppet“, „Jenkins“, „Nagios“, „Ansible“, „Chef“, „Saltstack“ ir „GIT“, skirtuose automatizuoti kelis SDLC veiksmus.
Turite mums klausimą? Prašau tai paminėti straipsnio „Git Bisect“ komentarų skyriuje ir mes susisieksime su jumis kuo greičiau.