git对分不';不工作,就没有输出

git对分不';不工作,就没有输出,git,git-bisect,Git,Git Bisect,最近我试着使用git-bisect,但它就是不起作用。树仍然在master中,我没有看到来自git-bisect的任何输出。以下是我尝试过的: git bisect start git bisect bad # no output, tried a couple of times git bisect good # no output git bisect reset #-> Already on 'master' 我在两个不同的回购协议上试过了。没用。git——Ubuntu 9.

最近我试着使用git-bisect,但它就是不起作用。树仍然在master中,我没有看到来自
git-bisect
的任何输出。以下是我尝试过的:

git bisect start
git bisect bad   # no output, tried a couple of times
git bisect good  # no output
git bisect reset #-> Already on 'master'
我在两个不同的回购协议上试过了。没用。git——Ubuntu 9.10上的版本是1.6.3.3
有什么想法吗?

Git对分介绍

“git对分”一开始可能有点让人困惑。一旦你了解了它的功能,就很容易了

“git二分法”的典型场景是:刚刚发现一个bug。您想知道是哪个版本引入了这个bug。您知道这个bug存在于最新版本中,但它是在以前的版本中引入的。您将需要一种方法来确定bug是否存在。这可以是自动测试,也可以是手动运行的测试

让我们开始吧。从分支机构的最新版本开始,发布:

git bisect start
然后告诉git已知当前版本不好:

git bisect bad
现在我们需要找到一个好的版本。检查一个足够大的东西,使其不会出现错误。如果您认为32转前应该是好的,那么:

git checkout HEAD~32
然后运行测试,看看它是否有bug。如果它有bug,您需要尝试更旧的版本(只需再次发布“git checkout HEAD~32”)。一旦你降落在一个没有bug的版本上,那么:

git bisect good
这告诉git当前的版本是好的。Git将立即检查出介于良好转速和不良转速之间的转速;您将看到输出,例如:

$ git bisect good
Bisecting: 7 revisions left to test after this (roughly 3 steps)
[909ba8cd7698720d00b2d10738f6d970a8955be4] Added convenience delegators to Cache
运行测试,并根据测试结果发出以下命令之一:

  • git对分良好#测试通过
  • git bisect bad#测试失败
  • git bisect skip#由于某些原因,我们无法在此版本上运行测试
    (不编译等)
Git将继续更改为不同的转速,并且您将继续告诉它好、坏或跳过。当git最终发现是哪个版本引发了所有的麻烦时,您将得到如下结果:

b25ab3cee963f4738264c9c9b5a8d1a344a94623 is the first bad commit
commit b25ab3cee963f4738264c9c9b5a8d1a344a94623
Author: Wayne Conrad <wconrad@yagni.com>
Date:   Fri Dec 25 18:20:54 2009 -0700

    More tests and refactoring

:040000 040000 6ff7502d5828598af55c7517fd9626ba019b16aa 39f346cb5a289cdb0955fcbba552f40e704b7e65 M      routecalc
现在是魔术。您所需要的只是一个测试程序,它返回退出代码“0”表示成功,返回1(例如)表示失败。告诉git您的测试:

git bisect run tests/mytest.rb
Git现在将运行测试,使用结果自动执行“Git对分好”或“Git对分坏”。它将继续执行该操作,直到找到引入错误的提交。你所要做的就是坐下来看着

完成后

完成后,发布:

git bisect reset

Git会让你回到起点。

你尝试的失败是因为你告诉它同一棵树有好有坏。这显然毫无意义

git bisect start # tells git you want to do a bisect operation
git bisect bad # tells git the current treesh (HEAD) is bad
git bisect good # tells git the current treeish (HEAD) is good
因为给定的树不可能是好的和坏的,git只是假设你在纠正自己

这里的关键是,如果不指定树,那么git会假定您指的是当前的树

一个更好的方法是首先找到一个commit的树,在那里事情可以工作。然后

git bisect start
git bisect bad # tells it HEAD is bad
git bisect good abc123   # treeish of the good commit

之后,对分将自动开始运行。您仍然需要与它交互,并告诉它对分提交的状态(或编写脚本以使其自动化)。

您要将哪些参数传递给
good
bad
?“坏”提交是“好”提交的后代吗?我也有同样的问题。执行
git bisect start
然后执行
git bisect bad
git bisect good
后,没有输出
git对分可视化
outputs
您需要给我至少一个好的和一个坏的修订。(您可以使用“git bisect bad”和“git bisect good”来实现这一点。)
无论我执行多少次
git bisect good
git bisect bad
git bisect run
都将继续运行,直到找到引入错误的提交。直到第一次错误的修订。@Lorenz,我的意思是按照提交的顺序第一次,而不是首先通过对分进行检查。我承认措辞模棱两可--很好。“我会更新它的。”老板对你的赞美表示感谢。我认为这个答案确实解决了老年退休金计划的问题;问题没有显示OP在执行“git对分好”或“git对分坏”之前使用“git checkout”更改头部,如此答案所示。您是对的-在
git对分开始后使用
git checkout HEAD~N
解决了问题。另一种方法是在start语句中指定提交边界,如下所示
gitstartfead~N
。不幸的是,我的反对票被锁定了,所以我没能撤回它。@U不担心。在我弄清楚在哪里可以兑换这些积分来买烤面包机之类的东西之前,我有多少并不重要。
git bisect start
git bisect bad # tells it HEAD is bad
git bisect good abc123   # treeish of the good commit