bisect¶
简介¶
使用二分搜索来查找引入错误的提交。
vb bisect SUBCOMMAND [OPTIONS]
示例¶
当项目出现错误,首先查看当前项目
trunk
分支时间线:
$ vb timeline trunk
=== 2024-07-22 ===
11:26:49 [e5da7b822c] *CURRENT* 提交 (user: 36657 tags: trunk)
10:58:36 [fda0e8b422] test7提交 (user: 36657 tags: trunk)
10:57:08 [6c7a333eb9] demo1提交 (user: 36657 tags: demo1)
10:56:00 [285e6b4715] Create new branch named "demo1" (user: 36657 tags: demo1)
10:55:35 [b921c6d805] *BRANCH* test6提交 (user: 36657 tags: trunk)
10:55:20 [acd041bf3f] test5提交 (user: 36657 tags: trunk)
10:55:05 [04ce08bef9] test4提交 (user: 36657 tags: trunk)
10:54:36 [30e084fca3] test3提交 (user: 36657 tags: trunk)
10:53:46 [32739c4a6e] reunk分支提交 (user: 36657 tags: trunk)
10:52:58 [631d5f28d7] test1,test2提交 (user: 36657 tags: trunk)
10:51:47 [4e5f9800f9] initial empty check-in (user: 36657 tags: trunk)
+++ no more data (11) +++
已知
fda0e8b422
版本是包含错误提交,标记为bad
,631d5f28d7
版本是未包含错误的版本,标记为good
, auto-next 为打开状态:
$ vb bisect bad fda0e8b422
$ vb bisect good 631d5f28d7
UPDATE test1.txt
REMOVE test5.txt
REMOVE test6.txt
REMOVE test7.txt
-------------------------------------------------------------------------------
updated-from: e5da7b822cd30ffb32df00b48ca36c7a8f46216b 2024-07-22 11:26:49 UTC
updated-to: 04ce08bef9526058c7ad86acd2d88d87aa8d0574 2024-07-22 10:55:05 UTC
tags: trunk
comment: test4提交 (user: 36657)
changes: 4 files modified.
"vb undo" is available to undo changes to the working checkout.
span: 6 steps-remaining: 3
1 BAD 2024-07-22 10:58:36 fda0e8b422c8e4a9
3 CURRENT 2024-07-22 10:55:05 04ce08bef9526058
2 GOOD 2024-07-22 10:52:58 631d5f28d7399915
当前签出版本为
04ce08bef9526058
,编译签出的版本并进行测试,测试正常,标为good
:
$ vb bisect good
ADD test5.txt
ADD test6.txt
-------------------------------------------------------------------------------
updated-from: 04ce08bef9526058c7ad86acd2d88d87aa8d0574 2024-07-22 10:55:05 UTC
updated-to: b921c6d805ab6b85e5f2ef50d2722ffa10f33396 2024-07-22 10:55:35 UTC
tags: trunk
comment: test6提交 (user: 36657)
changes: 2 files modified.
"vb undo" is available to undo changes to the working checkout.
span: 3 steps-remaining: 2
1 BAD 2024-07-22 10:58:36 fda0e8b422c8e4a9
4 CURRENT 2024-07-22 10:55:35 b921c6d805ab6b85
3 GOOD 2024-07-22 10:55:05 04ce08bef9526058
2 GOOD 2024-07-22 10:52:58 631d5f28d7399915
当前签出版本为
b921c6d805ab6b85
,编译签出的版本并进行测试,测试有错,标为bad
:
$ vb bisect bad
REMOVE test6.txt
-------------------------------------------------------------------------------
updated-from: b921c6d805ab6b85e5f2ef50d2722ffa10f33396 2024-07-22 10:55:35 UTC
updated-to: acd041bf3f6a57ea5109aeb761f93271e741a15c 2024-07-22 10:55:20 UTC
tags: trunk
comment: test5提交 (user: 36657)
changes: 1 file modified.
"vb undo" is available to undo changes to the working checkout.
span: 2 steps-remaining: 1
1 BAD 2024-07-22 10:58:36 fda0e8b422c8e4a9
4 BAD 2024-07-22 10:55:35 b921c6d805ab6b85
5 CURRENT 2024-07-22 10:55:20 acd041bf3f6a57ea
3 GOOD 2024-07-22 10:55:05 04ce08bef9526058
2 GOOD 2024-07-22 10:52:58 631d5f28d7399915
列出最近
bad
与good
之间所有版本:
$ vb bisect ls --all
2024-07-22 10:55:35 b921c6d805 BAD
2024-07-22 10:55:20 acd041bf3f CURRENT NEXT
2024-07-22 10:55:05 04ce08bef9 GOOD
当前签出版本为
acd041bf3f6a57ea
,编译签出的版本并进行测试,测试有错,标为bad
:
$ vb bisect bad
REMOVE test6.txt
-------------------------------------------------------------------------------
updated-from: b921c6d805ab6b85e5f2ef50d2722ffa10f33396 2024-07-22 10:55:35 UTC
updated-to: acd041bf3f6a57ea5109aeb761f93271e741a15c 2024-07-22 10:55:20 UTC
tags: trunk
comment: test5提交 (user: 36657)
changes: 1 file modified.
"vb undo" is available to undo changes to the working checkout.
span: 2 steps-remaining: 1
1 BAD 2024-07-22 10:58:36 fda0e8b422c8e4a9
4 BAD 2024-07-22 10:55:35 b921c6d805ab6b85
5 CURRENT 2024-07-22 10:55:20 acd041bf3f6a57ea
3 GOOD 2024-07-22 10:55:05 04ce08bef9526058
2 GOOD 2024-07-22 10:52:58 631d5f28d7399915
二分法结束,当前签出版本为
acd041bf3f6a57ea
,出错版本为最后一次标为bad
标签acd041bf3f6a57ea
版本,显示该版本信息:
$ vb blame -r acd041bf3f6a57ea -w test5.txt
acd041bf3f 2024-07-22 36657: test5
清理二分状态,取消之前的所有二分历史记录,返回到二分查找开始的状态:
$ vb bisect reset
将当前签出版本恢复到最新版本:
$ vb update
UPDATE test1.txt
UPDATE test5.txt
ADD test6.txt
ADD test7.txt
-------------------------------------------------------------------------------
updated-from: acd041bf3f6a57ea5109aeb761f93271e741a15c 2024-07-22 10:55:20 UTC
updated-to: e5da7b822cd30ffb32df00b48ca36c7a8f46216b 2024-07-22 11:26:49 UTC
tags: trunk
comment: 提交 (user: 36657)
changes: 4 files modified.
"vb undo" is available to undo changes to the working checkout.
说明¶
当项目出现问题时可能需要对签入的历史记录进行查找,该命令使用二分搜索算法来查找项目历史记录中引入错误的提交。
使用时,首先指定一个已知包含错误的 bad
提交和一个已知在引入错误之前的 good
提交,vb bisect next
将从这两个端点的历史记录范围中二分搜索出一个提交,将其签出。然后编译签出的版本并进行测试。如果该版本运行正常,则需要将该版本标识为 good
,否则为 bad
。
选择后,它会缩小范围,继续 next
进行二分查找。不断重复该过程:编译树,测试它,并根据它是好是坏来运行 vb bisect good
或 vb bisect bad
要求下一个需要测试的提交,直到找到引入更改的确切提交。
当不再有需要检查的提交版本时,最后一个 vb bisect next
会显示 bisect complete
并且按签入顺序显示所有标为 good 、 bad 和 skip 的版本,按测试顺序最后一个标为 bad
的版本为引入错误的提交。
事实上,vb bisect
可用于查找更改项目任何属性的提交;例如,修复错误的提交,或导致基准测试性能提高的提交。
子命令¶
bad¶
vb bisect bad [VERSION]
将指定版本的工程标识为 bad
,表示该版本包含错误。如果省略 VERSION ,则该签出工程将被标记为 bad
。
good¶
vb bisect good [VERSION]
将指定版本的工程标识为 good
,表示该版本是正常的。如果省略 VERSION ,则该签出工程将被标记为 good
。
skip¶
vb bisect skip [VERSION]
如果指定版本的工程无法正确编译或不适合参与此二分法,使用此命令将该版本的工程跳过,在接下来的二分法中忽略此版本。
next¶
vb bisect next
更新并显示 good
和 bad
版本之间需要进行二分查找的所有版本。
备注
good
、bad
或 skip
命令执行后默认自动运行 vb bisect next 命令,可以使用下面的 vb bisect options 子命令进行设置。
log|chart¶
vb bisect log
vb bisect chart
显示 good
、 bad
和 skip
版本的日志。vb bisect log
按测试顺序显示版本日志。vb bisect chart
按签入顺序显示版本日志。
reset¶
vb bisect reset
清理二分状态,取消之前的所有二分历史记录,返回到二分查找开始的状态。
options¶
vb bisect options [NAME] [VALUE]
列出所有二分选项,对二分法默认状态的设置。
选项¶
|
在 |
|
当处于 |
|
在 |
|
进行线性扫描而不是真正的二等分,在第一个 |
run¶
vb bisect run [OPTIONS] COMMAND
反复调用指定的指定命令来运行二分法。该命令的退出代码应为 0(表示 good )、125(表示 skip )和任何其他值(表示 bad )。
选项¶
|
在每个步骤之后提示用户做出 good|bad|skip 的决定,而不是使用 COMMAND 命令的退出代码 |
vlist|ls|status¶
vb bisect vlist|ls|status [-a|--all]
列出最近一次 good
与 bad
之间的所有提交版本。
ui¶
vb bisect ui
与 visionbyte ui
类似,在浏览器上打开项目时间轴,但是 bisect ui
从时间轴开始,仅显示当前二分图中的签入。
undo¶
vb bisect undo
撤消最近的一次 good
、 bad
或者 skip
命令。