git:simpler-bisect:tool应该自己找到好的散列

git:simpler-bisect:tool应该自己找到好的散列,git,git-bisect,Git,Git Bisect,我很懒,希望使用git-bisect来查找一个提交,它会在尽可能少的工作的情况下导致失败 我看不出有什么理由自己提供一份好的散列 我认为这些投入应该足够了: 一个脚本,成功时返回0,失败时返回其他 git位于分支上(不是分离的头部)。测试失败了 工具二分法(或包装器)可以跳回git历史中,找到一个好的散列本身 问题:如何做到这一点?对分就是这样做的 您可以向它传递一个脚本以运行,脚本将返回0或1 您还想为自己做些什么? 只需阅读以下内容: 对分运行 如果您有一个脚本,可以判断当前源代码是好

我很懒,希望使用git-bisect来查找一个提交,它会在尽可能少的工作的情况下导致失败

我看不出有什么理由自己提供一份好的散列

我认为这些投入应该足够了:

  • 一个脚本,成功时返回0,失败时返回其他
  • git位于分支上(不是分离的头部)。测试失败了
工具二分法(或包装器)可以跳回git历史中,找到一个好的散列本身


问题:如何做到这一点?

对分就是这样做的

您可以向它传递一个脚本以运行,脚本将返回
0
1

您还想为自己做些什么?


只需阅读以下内容:

对分运行
如果您有一个脚本,可以判断当前源代码是好的还是坏的,则可以通过发出以下命令将其平分:


请注意,如果当前源代码是好的/旧的,则脚本(上例中的my_脚本)应以代码0退出,如果当前源代码是坏的/新的,则脚本(my_脚本)应以介于
1
127
之间的代码退出(包括
125

任何其他退出代码将中止对分过程

当前源代码无法测试时,应使用特殊退出代码
125
。如果脚本使用此代码退出,则将跳过当前版本(请参见上面的git bisect skip)

125
被选为用于此目的的最高合理值,因为POSIX Shell使用
126
127
来表示特定的错误状态(
127
表示未找到命令,
126
表示找到但不可执行的命令)-​这些细节无关紧要,因为就对分运行而言,它们是脚本中的正常错误)

跳回git历史,找到一个好的散列

这听起来很简单:先运行
master~1
,然后运行
master~2
master~4
。。。等等,直到它返回0或使您返回原始提交(它应该找不到提交,然后通过二分法,您将找到最大的N,以便master~N仍然有效)

但我不确定你会对此感到高兴:

  • 您最终可以进入测试的前一个中断。随后的二分法可能会给出不正确的结果。如果您没有对历史做出任何假设,那么除了检查每个提交之外的任何序列都有这种风险
  • 如果您没有使用任何良好的修订版运行脚本,如何确保脚本是正确的

  • 无法
    git bisect
    完成您需要的现成内容吗?@TimBiegeleisen AFAIK您需要告诉git bisect一个好的散列。至少我读到的博客文章告诉我是这样的。就我个人而言,我想我总是有一个足够好的预感,关于一个bug的二分法是从多远的时候开始的。也许其他人可以给你你想要的。将初始提交标记为good-hash。如果我使用“git bisect run my_script arguments”,我会得到以下信息:
    git bisect run py.test-k test_foobar你需要从“git bisect start”开始。然后你需要给我至少一个好的和一个坏的修改。(您可以使用“git bisect bad”和“git bisect good”来进行此操作。)
    您需要指定课程的起点和终点。你设置的人执行脚本。你的答案与问题不匹配。请告诉我我的问题中有什么不清楚。也许措辞不好?告诉我问题是否可以更明确。Git无法为您找到“第一个”哈希,您必须提供它。这可能是您的回购协议的第一次提交,但git还是猜不到,您的最小数据是好/坏对提交。您确定这不可能吗?我不是数学专家,我也不明白图灵完成的真正含义,但我想这是可能的。
    git bisect run my_script arguments