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

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Solution aux problèmes d'autorisation Lors de la visualisation de la version Python dans Linux Terminal Lorsque vous essayez d'afficher la version Python dans Linux Terminal, entrez Python ...

Comment enseigner les bases de la programmation novice en informatique dans les 10 heures? Si vous n'avez que 10 heures pour enseigner à l'informatique novice des connaissances en programmation, que choisissez-vous d'enseigner ...

Lorsque vous utilisez la bibliothèque Pandas de Python, comment copier des colonnes entières entre deux frames de données avec différentes structures est un problème courant. Supposons que nous ayons deux dats ...

Comment éviter d'être détecté lors de l'utilisation de FiddlereVerywhere pour les lectures d'homme dans le milieu lorsque vous utilisez FiddlereVerywhere ...

Les expressions régulières sont des outils puissants pour la correspondance des motifs et la manipulation du texte dans la programmation, améliorant l'efficacité du traitement de texte sur diverses applications.

Comment Uvicorn écoute-t-il en permanence les demandes HTTP? Uvicorn est un serveur Web léger basé sur ASGI. L'une de ses fonctions principales est d'écouter les demandes HTTP et de procéder ...

Dans Python, comment créer dynamiquement un objet via une chaîne et appeler ses méthodes? Il s'agit d'une exigence de programmation courante, surtout si elle doit être configurée ou exécutée ...

L'article traite des bibliothèques Python populaires comme Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask et Demandes, détaillant leurs utilisations dans le calcul scientifique, l'analyse des données, la visualisation, l'apprentissage automatique, le développement Web et H et H
