• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

GIT中的二分查找(GIT BISECT)

python 搞代码 4年前 (2022-01-09) 59次浏览 已收录 0个评论

用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 079944e6Some 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 resetAlready on 'master&#3<strong style="color:transparent">本文来源gao@daima#com搞(%代@#码@网&</strong>9;[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 4b274b16Bisecting: 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 goodBisecting: 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 goodBisecting: 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 badBisecting: 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 goodBisecting: 4 revisions left to test after this (roughly 2 steps)[89eb147c2cfd2c797d3662aa2f55254441f0595a] uhci: stop using portio lists[root@jay-linux qemu.git]# git bisect badBisecting: 1 revision left to test after this (roughly 1 step)[358d615b6908b4916c74819ffad823cb4a74314e] exynos4210: Add EHCI support[root@jay-linux qemu.git]# git bisect badBisecting: 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 badaee7499a59d6778c10b018da41db4a22655ef8a8 is the first bad commitcommit aee7499a59d6778c10b018da41db4a22655ef8a8Author: Jay <just for fun>Date:   Sun Dec 16 04:49:45 2012 +0100### just for testing.  ### :040000 040000 a9ea5da3b5b85d86701f78608405504e9a4de905 0bb166863c84186202c639aff92dd326f1021d42 M      hw

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:GIT中的二分查找(GIT BISECT)
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址