GIT中的二分查找(GIT BISECT)
用git管理的代码仓库,如果发现引入的新的bug,则可以使用 “git bisect” 来进行二分查找,从而定位是到引入bug的commit。这也特别是Linux、KVM、QEMU等开源社区中大家最常用的方法。
当有bug被fix时,也可以同样使用”git bisect”来二分查找fix了这个bug的commit。不过,由于”git bisect”最初是用于寻找引入bug的坏点而不是fix bug的好点,故在使用”git bisect”寻找修复bug的点时,可能会遇到GIT工具有如下的错误提示:
[root@jay-linux qemu.git]# git bisect start # commit-4b274b160 is newer than commit-079944e6. [root@jay-linux qemu.git]# git bisect good 4b274b160 [root@jay-linux qemu.git]# git bisect bad 079944e6 Some good revs are not ancestor of the bad rev. git bisect cannot work properly in this case. Maybe you mistake good and bad revs?
遇到这种情况下,可以换一种思考方式,既然 “git bisect” 仅适用于将较新的commit标记为bad,而将较旧的标记为good,那么我们可以“将我们认为是good的点标记为bad,是bad的点标记为good”,然后找到最后的“the first bad commit”其实就似乎fix某个bug的“the first good commit”。
真的,稍微换一下思维方式就能解决这种问题了,再次体会到“think out of the box”的重要性。
下面是已qemu.git为例来演示一下“git bisect”的用法:
[root@jay-linux qemu.git]# git bisect reset Already on 'master' [root@jay-linux qemu.git]# git bisect start [root@jay-linux qemu.git]# git bisect good 079944e6 [root@jay-linux qemu.git]# git bisect bad 4b274b16 Bisecting: 55 revisions left to test after this (roughly 6 steps) [83f58e570f21c3e7227e7fbef1fc0e18b5ed7ea9] rtl8139: preserve link state across device reset [root@jay-linux qemu.git]# git bisect good Bisecting: 27 revisions left to test after this (roughly 5 steps) [4a4343671e183824a3f5db76ad561ce01e6c6e0a] usb/ehci: Move capsbase and opregbase into SysBus EHCI class [root@jay-linux qemu.git]# git bisect good Bisecting: 13 revisions left to test after this (roughly 4 steps) [507066f8a9610c0088df19ce7b3e436f43165ec1] qdev: Include qdev code into *-user, too [root@jay-linux qemu.git]# git bisect bad Bisecting: 8 revisions left to test after this (roughly 3 steps) [c3dd94b129e222e00a4ed00689e11afdd85c740f] Merge remote-tracking branch 'stefanha/net' into staging [root@jay-linux qemu.git]# git bisect good Bisecting: 4 revisions left to test after this (roughly 2 steps) [89eb147c2cfd2c797d3662aa2f55254441f0595a] uhci: stop using portio lists [root@jay-linux qemu.git]# git bisect bad Bisecting: 1 revision left to test after this (roughly 1 step) [358d615b6908b4916c74819ffad823cb4a74314e] exynos4210: Add EHCI support [root@jay-linux qemu.git]# git bisect bad Bisecting: 0 revisions left to test after this (roughly 0 steps) [aee7499a59d6778c10b018da41db4a22655ef8a8] usb/ehci: Add SysBus EHCI device for Exynos4210 [root@jay-linux qemu.git]# git bisect bad aee7499a59d6778c10b018da41db4a22655ef8a8 is the first bad commit commit aee7499a59d6778c10b018da41db4a22655ef8a8 Author: Jay <just for fun> Date: Sun Dec 16 04:49:45 2012 +0100 ### just for testing. ### :040000 040000 a9ea5da3b5b85d86701f78608405504e9a4de905 0bb166863c84186202c639aff92dd326f1021d42 M hw

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Penyelesaian kepada Isu Kebenaran Semasa Melihat Versi Python di Terminal Linux Apabila anda cuba melihat versi Python di Terminal Linux, masukkan Python ...

Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam masa 10 jam? Sekiranya anda hanya mempunyai 10 jam untuk mengajar pemula komputer beberapa pengetahuan pengaturcaraan, apa yang akan anda pilih untuk mengajar ...

Apabila menggunakan Perpustakaan Pandas Python, bagaimana untuk menyalin seluruh lajur antara dua data data dengan struktur yang berbeza adalah masalah biasa. Katakan kita mempunyai dua DAT ...

Cara mengelakkan dikesan semasa menggunakan fiddlerevery di mana untuk bacaan lelaki-dalam-pertengahan apabila anda menggunakan fiddlerevery di mana ...

Ekspresi biasa adalah alat yang berkuasa untuk memadankan corak dan manipulasi teks dalam pengaturcaraan, meningkatkan kecekapan dalam pemprosesan teks merentasi pelbagai aplikasi.

Bagaimanakah Uvicorn terus mendengar permintaan HTTP? Uvicorn adalah pelayan web ringan berdasarkan ASGI. Salah satu fungsi terasnya ialah mendengar permintaan HTTP dan teruskan ...

Di Python, bagaimana untuk membuat objek secara dinamik melalui rentetan dan panggil kaedahnya? Ini adalah keperluan pengaturcaraan yang biasa, terutamanya jika perlu dikonfigurasikan atau dijalankan ...

Artikel ini membincangkan perpustakaan Python yang popular seperti Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask, dan Permintaan, memperincikan kegunaan mereka dalam pengkomputeran saintifik, analisis data, visualisasi, pembelajaran mesin, pembangunan web, dan h
