【问题标题】:How do I get the current "status" of a git bisect?如何获得 git bisect 的当前“状态”?
【发布时间】:2016-10-06 15:29:20
【问题描述】:

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

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

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

【问题讨论】:

  • 包含此功能的 oh-my-git 的分支(对此感兴趣):github.com/compholio/oh-my-git
  • 注意:使用 Git 2.34(2021 年第四季度),继续用 C 重写“git bisect”(man),并涉及 git bisect 可视化。 (由Junio C Hamano -- gitster --commit 0a4cb1f 中合并,2021 年 9 月 23 日)
  • @VonC 您介意检查一下这是否会影响当前答案吗?
  • 我会在 2.34 发布时,看看状态是否会随着这个新实现而改变。

标签: git git-bisect


【解决方案1】:

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

可以通过git bisect visualize 获取留待探测的提交范围,这可以通过git bisect visualize | wc -l 或者你有什么来粗略统计。

在进入此状态之前打印的消息似乎大致基于此数量的一半,并取该一半的以 2 为底的对数。

例如,我现在处于被告知这样的状态:

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

在这种状态下,我有:

$ git bisect visualize --oneline | wc -l
21

即“10 个修订”实际上意味着在可疑范围内有 21 个提交。我们处于该范围的中间,因此大约有 10 个位于任一方向。为了得到 10,我们计算 21/2,向下取整。为了得到“大约剩下 3 个要测试”,我们只取 10 的以 2 为底的对数,向下取整。

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

$ 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)

需要进行一些错误处理,因为如果您没有报告至少一个好的提交和一个错误的提交,bisect 命令会报错。还有一些极端情况,例如避免将 log2 应用为零,如果可能发生的话。

【讨论】:

  • 这太完美了,我不知道你可以使用 --oneline 和那个命令。我正在查看手册页,“git bisect view --stat”似乎是我可以解析的最接近的东西,我只是有点紧张 grep '^commit' 可能会出现多行消息。跨度>
  • 我直观地添加了--oneline,因为它的输出看起来像git log的输出,我认为它只是基于git log而不是重新实现,并且可能通过选项通过。
  • 因为我的操作系统上没有打包txr,所以它在 Perl 中:git bisect visualize --oneline|wc -l|perl -MPOSIX -lne 'print "Bisecting: ".floor(($_-1)/2)." revisions left to test after this (roughly ".(floor(log($_-1)/log(2))-1)." steps)" if $_'
猜你喜欢
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 2018-06-03
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多