Git

Git Bisect bemutató

Git Bisect bemutató
Az elkötelezettség megjegyzésével elengedhetetlen a nyomon követhető kód fenntartása. Ez segít nyomon követni a problémákat. Egy hiba megtalálása azonban pusztán a megjegyzések alapján unalmas feladat. Hosszú időbe telhet az egész történelem áttekintése és kiderítése, hogy melyik elkövető a bűnös.

A git bisect parancs lehetővé teszi a hiba észlelésének felgyorsítását. Ez lehetővé teszi a probléma gyorsabb meghatározását. A git bisect segítségével meghatározhat egy sor olyan elkötelezettséget, amelyről feltételezhetően rendelkezik a problémás kóddal, majd bináris eliminációs módszerekkel megkeresheti a probléma kezdetét. A hibák felkutatása gyorsabbá és könnyebbé válik.

Állítsunk be egy példát, és futtassunk néhány tesztesetet, hogy lássuk, hogyan működik.

Példa a beállításra

Példánkban létrehozunk egy tesztet.txt fájlt, és minden egyes elkötelezéssel adjon hozzá egy új sort a fájlhoz. 16 elkövetés után a fájl végső állapota a következőképpen fog kinézni:

Itt van a jó kódom 1
Itt van a jó 2. kódom
Itt a jó kódom 3
Itt a jó kódom 4
Itt van a jó kódom 5
Itt van a jó kódom 6
Itt van a jó kódom 7
Itt van a jó kódom 8
Itt van a rossz kódom 1 <-- BUG INTRODUCED HERE
Itt van a 2. hibás kódom
Itt a rossz kódom 3
Itt a rossz kódom 4
Itt van a rossz kódom 5
Itt a rossz kódom 6
Itt van a rossz kódom 7
Itt van a rossz kódom 8
Itt van a rossz kódom 9

A fenti példában a hiba 8 végrehajtás után került be a kódba. A kódot a hiba bevezetése után is tovább fejlesztettük.

Létrehozhat egy my_bisect_test nevű mappát, és a mappán belül a következő parancsokkal hozhatja létre a példa helyzetet:

git init
echo "Itt a jó kódom 1"> teszt.txt
git add -A && git elkötelezettség -m "Elkötelezettségem 1"
echo "Itt a jó 2. kódom" >> teszt.txt
git add -A && git elkötelezettség -m "2. elkötelezettségem (v1.0.0) "
echo "Itt a jó kódom 3" >> teszt.txt
git add -A && git elkötelezettség -m "Saját elkötelezettség 3"
echo "Itt a jó 4-es kódom" >> teszt.txt
git add -A && git elkötelezettség -m "My kötelezettségvállalás 4"
echo "Itt a jó kódom 5" >> teszt.txt
git add -A && git elkötelezettség -m "Az én elkötelezettségem 5 (v1.0.1) "
echo "Itt a jó kódom 6" >> teszt.txt
git add -A && git elkötelezettség -m "Saját elkötelezettségem 6"
echo "Itt a jó kódom 7" >> teszt.txt
git add -A && git elkötelezettség -m "Az én elkötelezettségem 7 (v1.0.2) "
echo "Itt a jó kódom 8" >> teszt.txt
git add -A && git elkötelezettség -m "Saját elkötelezettségem 8"
echo "Itt van a hibás 1. kódom"> teszt.txt
git add -A && git elkötelezettség -m "Elkötelezettségem 9"
echo "Itt a rossz kódom 2" >> teszt.txt
git add -A && git elkötelezettség -m "10-es elkötelezettségem"
echo "Itt a rossz kódom 3" >> teszt.txt
git add -A && git elkötelezettség -m "Saját elkövetés 11"
echo "Itt van a rossz 4-es kódom" >> teszt.txt
git add -A && git elkötelezettség -m "Az én elkötelezettségem 12 (v1.0.3) "
echo "Itt a rossz kódom 5" >> teszt.txt
git add -A && git elkötelezettség -m "Elkötelezettségem 13"
echo "Itt a rossz kódom 6" >> teszt.txt
git add -A && git elkötelezettség -m "Saját elkötelezettségem 14"
echo "Itt a rossz kódom 7" >> teszt.txt
git add -A && git elkötelezettség -m "Az én elkötelezettségem 15 (v1.0.4) "
echo "Itt a rossz kódom 8" >> teszt.txt
git add -A && git elkötelezettség -m "16 elkötelezettségem"

Az előzmények ellenőrzése

Ha megnézi az elkövetések előzményeit, a következőket látja:

$ git napló
elkövetni 3023b63eb42c7fadc93c2dd18b532a44a0a6888a
Szerző: Zak H
Dátum: 2017. december 31., 23:07:27, 2017 -0800
Elkötelezettségem 17
elkövetni 10ef0286d6459cd5dea5038a54edf36fc9bfe4c3
Szerző: Zak H
Dátum: Vas Dec 31, 23:07:25 2017 -0800
Elkötelezettségem 16
elkötelez 598d4c4acaeb14cda0552b6a92aa975c436d337a
Szerző: Zak H
Dátum: 2017. december 31., 23:07:23, 2017 -0800
Elkötelezem magam 15 (v1.0.4)
elkövetni b9678b75ac93d532eed22ec2c6617e5a9d70fe7b
Szerző: Zak H
Dátum: 2017. december 31., 23:07:21, 2017 -0800
Elkötelezettségem 14
elkövetni eb3f2f7b0ebedb732ecb5f18bee786cd3cbbb521
Szerző: Zak H
Dátum: 2017. december 31., 23:07:19, 2017 -0800
Elkötelezettségem 13
3cb475a4693b704793946a878007b40a1ff67cd1
Szerző: Zak H
Dátum: 2017. december 31., 23:07:17, 2017 -0800
Elkötelezem magam 12 (v1.0.3)
elkövetni 0419a38d898e28c4db69064478ecab7736700310
Szerző: Zak H
Dátum: 2017. december 31., 23:07:15, 2017 -0800
Elkötelezettségem 11
elkövetni 15bc59201ac1f16aeaa233eb485e81fad48fe35f
Szerző: Zak H
Dátum: 2017. december 31., 23:07:13, 2017 -0800
Elkötelezettségem 10
elkövetni a33e366ad9f6004a61a468b48b36e0c0c802a815
Szerző: Zak H
Dátum: 2017. december 31., 23:07:11, 2017 -0800
Elkötelezettségem 9
elkövetni ead472d61f516067983d7e29d548fc856d6e6868
Szerző: Zak H
Dátum: 2017. december 31., 23:07:09, 2017 -0800
Elkötelezettségem 8
elkövetni 8995d427668768af88266f1e78213506586b0157
Szerző: Zak H
Dátum: 2017. december 31., 23:07:07, 2017 -0800
Elkötelezem magam 7 (v1.0.2)
elkötelezi magát be3b341559752e733c6392a16d6e87b5af52e701
Szerző: Zak H
Dátum: 2017. december 31., 23:07:05, 2017 -0800
Elkötelezettségem 6
elkövetni c54b58ba8f73fb464222f30c90aa72f60b99bda9
Szerző: Zak H
Dátum: 2017. december 31., 23:07:03, 2017 -0800
Az 5. elkötelezettségem (v1.0.1)
elkövetni 264267111643ef5014e92e23fd2f306a10e93a64
Szerző: Zak H
Dátum: 2017. december 31., 23:07:01, 2017 -0800
Elkötelezettségem 4
elkövetni cfd7127cd35f3c1a55eb7c6608ecab75be30b208
Szerző: Zak H
Dátum: 2017. december 31., 23:06:59, 2017 -0800
Elkötelezettségem 3
elkövetni 3f90793b631ddce7be509c36b0244606a2c0e8ad
Szerző: Zak H
Dátum: 2017. december 31., 23:06:57, 2017 -0800
2. kötelezettségvállalásom (v1.0.0)
elkövetni cc163adb8a3f7b7b52411db2b3d8bab9b7fb191e
Szerző: Zak H
Dátum: 2017. december 31., 23:06:55, 2017 -0800
Elkötelezettségem 1

Még csak néhány elkötelezettség esetén is láthatja, hogy nehéz meghatározni a hibát elindító elkötelezettséget.


A hiba megtalálása

Használjuk a git log -online-t, hogy lássuk a végrehajtási előzmények tisztább verzióját.

$ git log - online
3023b63 Elkövetésem 17
10ef028 Elkövetésem 16
598d4c4 15-ös kötelezettségvállalásom (v1.0.4)
b9678b7 Elkövetésem 14
eb3f2f7 Elkövetésem 13
3cb475a Az én elkötelezettségem 12 (v1.0.3)
0419a38 Elkövetésem 11
15bc592 Az én elkötelezettségem 10
a33e366 Elkövetésem 9
ead472d Elkövetésem 8
8995d42 Elkövetem a 7-et (v1.0.2)
be3b341 Elkövetésem 6
c54b58b Az 5. elkötelezettségem (v1.0.1)
2642671 4. kötelezettségvállalásom
cfd7127 Elkövetésem 3
3f90793 2. elkövetésem (v1.0.0)
cc163ad Elkövetésem 1

Meg akarjuk találni azt a helyzetet, amikor az „Itt a rossz kódom 1 <- BUG INTRODUCED HERE” entered the picture.

1. helyzet

Tegyük fel, hogy emlékszünk arra, hogy a kódunk jó volt v1-ig.0.2, és ellenőrizni szeretnénk ettől a pillanattól a legutóbbi elkötelezettségig. Először elindítjuk a bisect parancsot:

$ git kétfelé indul

Megadjuk a jó és a rossz határt (a hash nem jelenti a legújabb kódot):

$ git kettéosztja a jó 8995d42 értéket
$ git bisect rossz

Kimenet:

Felezés: 4 revízió maradt tesztelésre (nagyjából 2 lépés)
[3cb475a4693b704793946a878007b40a1ff67cd1] Elkövetésem 12 (v1.0.3)

A bisect parancs megtalálta a középső pontot a megadott tartományunkban, és automatikusan áthelyezte a kódot a 12 végrehajtására. Most tesztelhetjük a kódunkat. Esetünkben a teszt tartalmát fogjuk kimenetelni.txt:

$ macska teszt.txt

Kimenet:

Itt van a jó kódom 1
Itt a jó 2. kódom
Itt van a jó kódom 3
Itt a jó kódom 4
Itt van a jó kódom 5
Itt van a jó kódom 6
Itt van a jó kódom 7
Itt van a jó kódom 8
Itt van a rossz kódom 1 <-- BUG INTRODUCED HERE
Itt van a 2. hibás kódom
Itt a rossz kódom 3
Itt a rossz kódom 4

Látjuk, hogy a teszt állapota.A txt a hibát követő állapotban van. Tehát rossz állapotban van. Tehát tudattuk a bisect paranccsal:

$ git bisect rossz

Kimenet:

Felezés: 2 felülvizsgálat maradt tesztelésre (nagyjából 1 lépés)
[a33e366ad9f6004a61a468b48b36e0c0c802a815] Elkövetésem 9

A kódunkat 9-re kötelezi. Újra teszteljük:

$ macska teszt.txt

Kimenet:

Itt van a jó kódom 1
Itt van a jó 2. kódom
Itt a jó kódom 3
Itt a jó kódom 4
Itt van a jó kódom 5
Itt van a jó kódom 6
Itt van a jó kódom 7
Itt van a jó kódom 8
Itt van a rossz kódom 1 <-- BUG INTRODUCED HERE

Látjuk, hogy megtaláltuk a hiba kiindulópontját. Az „a33e366 Az én elkötelezettségem 9” elkövető a bűnös.

Végül mindent normalizálunk:

$ git bisect reset

Kimenet:

A HEAD korábbi pozíciója a33e366 volt
Átállt a "master" fiókra

2. helyzet

Ugyanebben a példában próbáljunk meg egy olyan helyzetet, amikor egy másik fejlesztő azzal a feltevéssel indul, hogy a hibát v1 között vezették be.0.0 és v1.0.3. Újra elkezdhetjük a folyamatot:

$ git kétfelé indul
$ git bisect jó 3f90793
$ git kettévágja a rossz 3cb475a-t

Kimenet:

Felezés: 4 felülvizsgálat maradt tesztelésre (nagyjából 2 lépés)
[8995d427668768af88266f1e78213506586b0157] Elkötelezettségem 7 (v1).0.2)

A Bisect áthelyezte kódunkat a 7 vagy a v1 végrehajtására.0.2. Futtassuk a tesztünket:

$ macska teszt.txt

Kimenet:

Itt van a jó kódom 1
Itt a jó 2. kódom
Itt a jó kódom 3
Itt a jó kódom 4
Itt van a jó kódom 5
Itt van a jó kódom 6
Itt van a jó kódom 7

Nem látunk rossz kódot. Tehát tudassa a git bisect-el:

$ git bisect jó

Kimenet:

Felezés: 2 felülvizsgálat maradt tesztelésre (nagyjából 1 lépés)
[a33e366ad9f6004a61a468b48b36e0c0c802a815] Elkövetésem 9

Ez arra késztetett bennünket, hogy elkötelezzük a 9-et. Újra teszteljük:

$ macska teszt.txt

Kimenet:

Itt van a jó kódom 1
Itt a jó 2. kódom
Itt a jó kódom 3
Itt a jó kódom 4
Itt van a jó kódom 5
Itt van a jó kódom 6
Itt van a jó kódom 7
Itt van a jó kódom 8
Itt van a rossz kódom 1 <-- BUG INTRODUCED HERE

Ismét megtaláltuk a hibát bemutató elkötelezettséget. Ez volt az „a33e366 Az én elkötelezettségem 9” elkötelezettség. Annak ellenére, hogy a különböző gyanús tartományokkal kezdtük, néhány lépésben ugyanazt a hibát találtuk.

Állítsuk vissza:

$ git bisect reset

Kimenet:

A HEAD korábbi pozíciója a33e366 volt
Átállt a "master" fiókra

Következtetés

Amint a példából látható, a git bisect segítségével gyorsabban meg tudjuk határozni a problémát. Nagyszerű eszköz a termelékenység növelésére. Ahelyett, hogy végigvenné a kötelezettségvállalások teljes történetét, szisztematikusabban alkalmazhatja a hibakeresést.

A további vizsgálat:

https: // git-scm.com / docs / git-bisect
https: // git-scm.com / book / en / v2 / Git-Tools-Debugging-with-Git

Az FPS-számláló megjelenítése a Linux-játékokban
A Linux játék komoly lendületet kapott, amikor a Valve 2012-ben bejelentette a Linux támogatását a Steam kliensnek és játékaiknak. Azóta sok AAA és in...
Sid Meier Civilization VI letöltése és lejátszása Linuxon
Bevezetés a játékba A Civilization 6 egy modern felvétel a Age of Empires játékok sorozatában bevezetett klasszikus koncepcióra. Az ötlet meglehetősen...
A Doom telepítése és lejátszása Linuxon
Bevezetés a Doom-ba A Doom sorozat a 90-es években keletkezett az eredeti Doom megjelenése után. Azonnali sláger volt, és ettől kezdve a játéksorozat ...