如何获得git bisect的当前"状态"?

Com*_*lio 5 git git-bisect

我正在对oh-my-git进行一些个人修改(显示终端上的git状态),我想显示当前bisect的"状态".具体来说,我想获得剩余提交的数量和最后一个bisect命令的大致步骤数,例如:

Bisecting: 9 revisions left to test after this (roughly 3 steps)

似乎获取此信息的唯一方法是通过实际执行git bisect goodgit bisect bad.但是,我不想通过运行这些命令中的任何一个来更改repo的状态 - 我只想获取当前的bisect状态.

Kaz*_*Kaz 8

基于极其有限的测试完全天真的答案:

可以通过以下方式获得留给探测的提交范围git bisect visualize,这可以粗略计算git bisect visualize | wc -l或者您有什么.

在进入此状态之前打印的消息似乎大致基于此数量的一半,并采用该半数的基数2日志.

例如,我现在处于这样一种状态:

Bisecting: 10 revisions left to test after this (roughly 3 steps)
Run Code Online (Sandbox Code Playgroud)

在这种状态下,我有:

$ git bisect visualize --oneline | wc -l
21
Run Code Online (Sandbox Code Playgroud)

即"10次修订"实际上意味着在可疑范围内有21次提交.我们处于该范围的中间位置,因此大约10个位于任一方向.为了获得10,我们计算21/2,向下舍入.要获得"大约剩下3个测试",我们只需将基数为2的对数值10,向下舍入.

用我最喜欢的脚本语言(替换你的):

$ txr -P '(let* ((count (length
                          (get-lines
                            (open-command "git bisect visualize --oneline"))))
                 (left (trunc count 2)))
            `Bisecting: @left revisions left to test after this \
            \ (roughly @(int-flo (log2 left)) steps)`)'
Bisecting: 10 revisions left to test after this (roughly 3 steps)
Run Code Online (Sandbox Code Playgroud)

需要进行一些错误处理,因为bisect如果您没有报告至少一个好的和一个错误的提交,那么命令会抱怨.还有一些极端情况,例如,如果可以发生,则将log2应用于零.