bisect 命令可帮助您找到引入错误的变更集。经常发生的情况是,您意识到某些东西已经损坏并且已经损坏了一段时间。使用hg bisect,您可以准确判断它何时损坏。当您知道这一点时,解决问题通常要容易得多。
它是这样工作的。您首先重置 bisect 状态并将当前版本标记为错误,因为它包含错误:
$ hg bisect --reset
$ hg bisect --bad
然后您在历史中跳转到您希望该错误不存在的点:
$ hg update -r -100
89 files updated, 0 files merged, 30 files removed, 0 files unresolved
您必须在此版本中测试您的软件,如果错误不存在,那么您可以将其标记为良好:
$ hg bisect --good
Testing changeset 11964:79bd860b8eb7 (81 changesets remaining, ~6 tests)
36 files updated, 0 files merged, 22 files removed, 0 files unresolved
当您将其标记为好时,Mercurial 会将您的工作副本更新到大致介于好和坏变更集之间的位置。您现在必须测试此变更集并将其标记为好/坏。
$ hg bisect --good
Testing changeset 11985:81edef14922e (41 changesets remaining, ~5 tests)
23 files updated, 0 files merged, 26 files removed, 0 files unresolved
我会继续这样做,直到 Mercurial 将搜索范围缩小到单个变更集:
$ hg bisect --bad
Testing changeset 11975:21884b433c51 (20 changesets remaining, ~4 tests)
18 files updated, 0 files merged, 8 files removed, 0 files unresolved
$ hg bisect --good
Testing changeset 11980:c443e95d295b (10 changesets remaining, ~3 tests)
5 files updated, 0 files merged, 10 files removed, 0 files unresolved
$ hg bisect --good
Testing changeset 11982:56d9b73487ff (5 changesets remaining, ~2 tests)
2 files updated, 0 files merged, 4 files removed, 0 files unresolved
$ hg bisect --bad
Testing changeset 11981:518b90d66fad (2 changesets remaining, ~1 tests)
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg bisect --bad
The first bad revision is:
changeset: 11981:518b90d66fad
user: Pradeepkumar Gayam <in3xes@gmail.com>
date: Wed Aug 18 05:55:56 2010 +0530
summary: tests: unify test-merge8
您仍然需要自己进行调试,但是使用hg bisect 可以让您不必跟踪您已经测试过哪些变更集以及您还需要测试哪些变更集。您可以为此使用一堆便利贴,但让 Mercurial 来做会更好。当变更集图由于合并而非线性时尤其如此。
总而言之,hg bisect 可帮助您在对数时间内搜索错误的变更集,而无需跟踪您在搜索中的位置。