Git dusekcado

Versitenaj sistemoj utilas por vidi la evoluon de kodbazo aŭ la ŝanĝojn. Kulpigi (an: git blame) utilas por vidi kiu/kiam ŝanĝis specifan linion, sed foje io ne funkcias kaj vi ne scias tion kio rompis ĝin.

Metodo por malkovri kion okazis estas: hazarde trovi pasintan enmeton ŝanĝi al ĝi kaj kontroli mane. Alia ebleco estas uzi dusekadon (an: bisecting). La ĝenerala ideo estas trovi iun antaŭan enmeton kie la sistemo funkcias ĝuste, marku la nunan enmeton kiel malbona kaj la antaŭa kiel bona kaj la dusekcado disigos la enmetan historion per duoniga serĉo. Ekzemple se la historio estas jena:

commit b393b73d9535a4721ec08bd69a1ae234404d698c
Author: Kodemulo <kodemulo@zahemhof.um>
Date:   Tue Jul 28 15:36:01 2015 -0500

    Aldonis tradukon

commit 89a62c9b4aca9a967e6656ea03968d29203f9b73
Merge: 1c422eb ca4d834
Author: Kodemulo <kodemulo@zahemhof.um>
Date:   Tue Jul 28 14:30:08 2015 -0500

    Merge pull request #332 from firmao/nova_funkcio

  La novia funkcio plibonigas la sistemon por la uzantoj

commit ca4d834af900b7f6cc99b3c38f41d303082562c7
Author: Kodemulo <kodemulo@zahemhof.um>
Date:   Thu Jul 23 15:59:26 2015 -0500

    Kaŝis formon

commit 1c422eb41a90a0b829d4fda212cbf8c6407f472c
Author: Kodemulo <kodemulo@zahemhof.um>
Date:   Tue Jul 28 14:02:01 2015 -0500

    Aldonis novan sekcion

commit 04fdfbddc531234fcd3ee8f16865f61e635a3145
Author: Kodemulo <kodemulo@zahemhof.um>
Date:   Tue Jul 28 14:00:07 2015 -0500

    Aldonis uzulan kodon

commit 5c3c2538fc7e6f8cedcddf25a186d54847e4054f
Author: Kodemulo <kodemulo@zahemhof.um>
Date:   Tue Jul 28 13:59:57 2015 -0500

    Aldonis identkontrolon

commit b607075514224922a086d35f0703d7ee9a2d5942
Author: Kodemulo <kodemulo@zahemhof.um>
Date:   Tue Jul 28 13:58:12 2015 -0500

    Forigis ŝablonon

commit tod9547c372113edf5f028de99fb7238e70
Author: Kodemulo <kodemulo@zahemhof.um>
Date:   Tue Jul 28 13:50:16 2015 -0500

    Komencis la estran sistemon

Ni diru ke ni konas ke iun malfunkcias je b393b73d9535a4721ec08bd69a1ae234404d698c kaj kiam ni iras la tod9547c372113edf5f028de99fb7238e70 ĝi funkcias. Ni faru la jena

> git checkout b393b73d9535a4721ec08bd69a1ae234404d698c
> git bisect bad
You need to start by "git bisect start"
Do you want me to do it for you [Y/n]? y
> git checkout tod9547c372113edf5f028de99fb7238e70
HEAD is now at tod9547... Komencis la estran sistemon
> git bisect good
Bisecting: 6 revisions left to test after this (roughly 3 steps)
[1c422eb41a90a0b829d4fda212cbf8c6407f472c] Aldonis novan sekcion

Nun vi estas ĉe 1c422eb41a90a0b829d4fda212cbf8c6407f472c kiu estas en la mezo de la historio. Nun vi povas kontroli ĉu la funkcio bonas aŭ ne kaj entajpu git bisect goodgit bisect bad depende de la respondo.

Post kiam vi havas la enmetan identigilon vi povas montri ĝin (git show *identigilon*) por vidi tion kio ŝanĝiĝis. Mi esperas ke tio povas ŝpari tempon kiam vi bezonas trovi nekonatan ŝanĝon.

Postskribo: Mi ankaŭ verkos artikolon pri kiel aŭtomatigi la proceson per skripto.