Git bisect käsk annab võimaluse vea tuvastamise protsessi kiirendada. See võimaldab teil probleemi kiiremini kindlaks teha. Git bisecti abil saate määratleda toimingute vahemiku, mille puhul kahtlustate probleemset koodi, ja seejärel probleemi alguse leidmiseks kasutada binaarseid kõrvaldamismeetodeid. Vigade leidmine muutub kiiremaks ja lihtsamaks.
Paneme paika näite ja käivitame paar proovijuhtu, et näha, kuidas see töötab.
Näite seadistamine
Meie näites loome testi.txt-faili ja lisage faili iga rida iga pühendusega. Pärast 16 kohustust näeb faili lõplik olek välja selline:
Siin on minu hea kood 1Siin on minu hea kood 2
Siin on minu hea kood 3
Siin on minu hea kood 4
Siin on minu hea kood 5
Siin on minu hea kood 6
Siin on minu hea kood 7
Siin on minu hea kood 8
Siin on minu halb kood 1 <-- BUG INTRODUCED HERE
Siin on minu halb kood 2
Siin on minu halb kood 3
Siin on minu halb kood 4
Siin on minu halb kood 5
Siin on minu halb kood 6
Siin on minu halb kood 7
Siin on minu halb kood 8
Siin on minu halb kood 9
Ülalolevas näites sattus viga koodi sisse pärast 8 toimingut. Jätkasime koodi arendamist ka pärast vea tutvustamist.
Saate luua kausta nimega my_bisect_test ja kasutada näitesituatsiooni loomiseks järgmisi käske kausta sees:
git initkaja "Siin on minu hea kood 1"> test.txt
git add -A && git pühendus -m "Minu pühendumine 1"
kaja "Siin on minu hea kood 2" >> test.txt
git add -A && git toime -m "Minu kohustus 2 (v1.0.0) "
kaja "Siin on minu hea kood 3" >> test.txt
git add -A && git pühendus -m "Minu pühendumine 3"
kaja "Siin on minu hea kood 4" >> test.txt
git add -A && git pühendus -m "Minu pühendumine 4"
kaja "Siin on minu hea kood 5" >> test.txt
git add -A && git toime -m "Minu kohustus 5 (v1.0.1) "
kaja "Siin on minu hea kood 6" >> test.txt
git add -A && git pühendus -m "Minu kohustus 6"
kaja "Siin on minu hea kood 7" >> test.txt
git add -A && git toime -m "Minu pühendumine 7 (v1.0.2) "
kaja "Siin on minu hea kood 8" >> test.txt
git add -A && git pühendama -m "Minu kohustus 8"
kaja "Siin on minu halb kood 1"> test.txt
git add -A && git pühendu -m "Minu pühendumine 9"
kaja "Siin on minu halb kood 2" >> test.txt
git add -A && git pühendu -m "Minu pühendumine 10"
kaja "Siin on minu halb kood 3" >> test.txt
git add -A && git pühendama -m "Minu pühendumine 11"
kaja "Siin on minu halb kood 4" >> test.txt
git add -A && git toime -m "Minu kohustus 12 (v1.0.3) "
kaja "Siin on minu halb kood 5" >> test.txt
git add -A && git pühendama -m "Minu pühendumine 13"
kaja "Siin on minu halb kood 6" >> test.txt
git add -A && git pühendu -m "Minu pühendumine 14"
kaja "Siin on minu halb kood 7" >> test.txt
git add -A && git toime -m "Minu kohustus 15 (v1.0.4) "
kaja "Siin on minu halb kood 8" >> test.txt
git add -A && git pühendus -m "Minu kohustus 16"
Ajaloo kontrollimine
Kui vaatate toimingute ajalugu, näete järgmist:
$ git logitoime panema 3023b63eb42c7fadc93c2dd18b532a44a0a6888a
Autor: Zak H
Kuupäev: 31. detsember 23:07:27 2017 -0800
Minu kohustus 17
pühenduma 10ef0286d6459cd5dea5038a54edf36fc9bfe4c3
Autor: Zak H
Kuupäev: 31. detsember 23:07:25 2017 -0800
Minu kohustus 16
pühenduma 598d4c4acaeb14cda0552b6a92aa975c436d337a
Autor: Zak H
Kuupäev: 31. detsember 23:07:23 2017 -0800
Minu kohustus 15 (v1.0.4)
panema b9678b75ac93d532eed22ec2c6617e5a9d70fe7b
Autor: Zak H
Kuupäev: 31. detsember 23:07:21 2017 -0800
Minu kohustus 14
siduma eb3f2f7b0ebedb732ecb5f18bee786cd3cbbb521
Autor: Zak H
Kuupäev: 31. detsember 23:07:19 2017 -0800
Minu kohustus 13
pühenduma 3cb475a4693b704793946a878007b40a1ff67cd1
Autor: Zak H
Kuupäev: 31. detsember 23:07:17 2017 -0800
Minu kohustus 12 (v1.0.3)
toime panema 0419a38d898e28c4db69064478ecab7736700310
Autor: Zak H
Kuupäev: 31. detsember 23:07:15 2017 -0800
Minu kohustus 11
toime panema 15bc59201ac1f16aeaa233eb485e81fad48fe35f
Autor: Zak H
Kuupäev: 31. detsember 23:07:13 2017 -0800
Minu kohustus 10
toime panema a33e366ad9f6004a61a468b48b36e0c0c802a815
Autor: Zak H
Kuupäev: 31. detsember 23:07:11 2017 -0800
Minu kohustus 9
toime panema ead472d61f516067983d7e29d548fc856d6e6868
Autor: Zak H
Kuupäev: 31. detsember 23:07:09 2017 -0800
Minu kohustus 8
pühenduma 8995d427668768af88266f1e78213506586b0157
Autor: Zak H
Kuupäev: 31. detsember 23:07:07 2017 -0800
Minu kohustus 7 (v1.0.2)
pühenduma be3b341559752e733c6392a16d6e87b5af52e701
Autor: Zak H
Kuupäev: 31. detsember 23:07:05 2017 -0800
Minu kohustus 6
pühenduma c54b58ba8f73fb464222f30c90aa72f60b99bda9
Autor: Zak H
Kuupäev: 31. detsember 23:07:03 2017 -0800
Minu kohustus 5 (v1.0.1)
toime panema 264267111643ef5014e92e23fd2f306a10e93a64
Autor: Zak H
Kuupäev: 31. detsember 23:07:01 2017 -0800
Minu kohustus 4
pühenduma cfd7127cd35f3c1a55eb7c6608ecab75be30b208
Autor: Zak H
Kuupäev: 31. detsember 23:06:59 2017 -0800
Minu kohustus 3
pühenduma 3f90793b631ddce7be509c36b0244606a2c0e8ad
Autor: Zak H
Kuupäev: 31. detsember 23:06:57 2017 -0800
Minu kohustus 2 (v1.0.0)
pühenduma cc163adb8a3f7b7b52411db2b3d8bab9b7fb191e
Autor: Zak H
Kuupäev: 31. detsember 23:06:55 2017 -0800
Minu kohustus 1
Isegi ainult käputäie kohustuste korral näete, et vea käivitanud kohustuse määramine on keeruline.
Vea leidmine
Kasutame git log -online, et näha pühendamise ajaloo puhtamat versiooni.
$ git log - oneline3023b63 Minu kohustus 17
10ef028 Minu kohustus 16
598d4c4 Minu kohustus 15 (v1.0.4)
b9678b7 Minu kohustus 14
eb3f2f7 Minu pühendumine 13
3cb475a Minu kohustus 12 (v1.0.3)
0419a38 Minu kohustus 11
15bc592 Minu kohustus 10
a33e366 Minu kohustus 9
ead472d Minu kohustus 8
8995d42 Minu kohustus 7 (v1.0.2)
be3b341 Minu kohustus 6
c54b58b Minu kohustus 5 (v1.0.1)
2642671 Minu kohustus 4
cfd7127 Minu kohustus 3
3f90793 Minu kohustus 2 (v1.0.0)
cc163ad Minu kohustus 1
Tahame leida olukorra, kus rida „Siin on minu halb kood 1 <- BUG INTRODUCED HERE” entered the picture.
Olukord 1
Oletame, et mäletame, et meie kood oli hea kuni v1.0.2 ja me tahame kontrollida sellest hetkest kuni viimase kohustuse täitmiseni. Alustame kõigepealt bisecti käsku:
$ git kahepoolne algusPakume hea ja halva piiri (räsi ei tähenda uusimat koodi):
$ git poolitage head 8995d42$ git poolitage halb
Väljund:
Poolitamine: pärast seda on testimiseks jäänud 4 versiooni (umbes 2 sammu)[3cb475a4693b704793946a878007b40a1ff67cd1] Minu kohustus 12 (v1.0.3)
Bisect-käsk on leidnud meie määratletud vahemikus keskpunkti ja teisaldanud koodi automaatselt 12 sidumiseks. Saame oma koodi nüüd testida. Meie puhul väljastame testi sisu.txt:
$ kassi test.txtVäljund:
Siin on minu hea kood 1Siin on minu hea kood 2
Siin on minu hea kood 3
Siin on minu hea kood 4
Siin on minu hea kood 5
Siin on minu hea kood 6
Siin on minu hea kood 7
Siin on minu hea kood 8
Siin on minu halb kood 1 <-- BUG INTRODUCED HERE
Siin on minu halb kood 2
Siin on minu halb kood 3
Siin on minu halb kood 4
Näeme, et testimise seis.txt on veajärgses olekus. Nii et see on halvas seisus. Nii et andsime bisect käsule teada:
$ git poolitage halbVäljund:
Poolitamine: pärast seda on testimiseks jäänud 2 redaktsiooni (umbes 1 samm)[a33e366ad9f6004a61a468b48b36e0c0c802a815] Minu kohustus 9
See liigutab meie koodi 9 täitmiseks. Testime uuesti:
$ kassi test.txtVäljund:
Siin on minu hea kood 1Siin on minu hea kood 2
Siin on minu hea kood 3
Siin on minu hea kood 4
Siin on minu hea kood 5
Siin on minu hea kood 6
Siin on minu hea kood 7
Siin on minu hea kood 8
Siin on minu halb kood 1 <-- BUG INTRODUCED HERE
Näeme, et oleme leidnud vea alguspunkti. Süüdlane on „a33e366 Minu pühendumine 9”.
Lõpuks paneme kõik normaalseks:
$ git kahesuunaline lähtestamineVäljund:
Eelmine HEADi ametikoht oli a33e366 ... Minu kohustus 9Üleminek harule 'master'
Olukord 2
Proovime samas näites olukorda, kus teine arendaja lähtub eeldusest, et viga võeti kasutusele v1 vahel.0.0 ja v1.0.3. Saame protsessi uuesti alustada:
$ git kahepoolne algus$ git poolitage head 3f90793
$ git poolitage halb 3cb475a
Väljund:
Poolitamine: pärast seda on testimiseks jäänud 4 versiooni (umbes 2 sammu)[8995d427668768af88266f1e78213506586b0157] Minu kohustus 7 (v1.0.2)
Bisect on meie koodi viinud 7 või v1 sidumiseks.0.2. Käivitame oma testi:
$ kassi test.txtVäljund:
Siin on minu hea kood 1Siin on minu hea kood 2
Siin on minu hea kood 3
Siin on minu hea kood 4
Siin on minu hea kood 5
Siin on minu hea kood 6
Siin on minu hea kood 7
Me ei näe ühtegi halba koodi. Nii et andke git poolitada:
$ git poolitada heaVäljund:
Poolitamine: pärast seda on testimiseks jäänud 2 redaktsiooni (umbes 1 samm)[a33e366ad9f6004a61a468b48b36e0c0c802a815] Minu kohustus 9
See on pannud meid 9 pühenduma. Testime uuesti:
$ kassi test.txtVäljund:
Siin on minu hea kood 1Siin on minu hea kood 2
Siin on minu hea kood 3
Siin on minu hea kood 4
Siin on minu hea kood 5
Siin on minu hea kood 6
Siin on minu hea kood 7
Siin on minu hea kood 8
Siin on minu halb kood 1 <-- BUG INTRODUCED HERE
Oleme taas leidnud kohustuse, mis tõi vea sisse. See oli kohustus "a33e366 Minu kohustus 9". Kuigi alustasime erineva kahtlustusvahemikuga, leidsime mõne sammu jooksul sama vea.
Lähtestame:
$ git kahesuunaline lähtestamineVäljund:
Eelmine HEADi ametikoht oli a33e366 ... Minu kohustus 9Üleminek harule 'master'
Järeldus
Nagu näite põhjal näha, võimaldab git bisect meil probleemi kiiremini tuvastada. See on suurepärane vahend oma tootlikkuse suurendamiseks. Kogu kohustuste ajaloo läbimise asemel võite silumisele läheneda süsteemsemalt.
Edasine uuring:
https: // git-scm.com / docs / git-bisect
https: // git-scm.com / book / en / v2 / Git-Tools-silumine-with-Git-ga