Der Befehl bisect
hilft Ihnen, den Änderungssatz zu finden, der einen Fehler verursacht hat. Oft merkt man, dass etwas kaputt ist und dass es für eine Weile gebrochen ist. Mit hg bisect
können Sie genau herausfinden, wann es kaputt ging. Wenn Sie das wissen, ist es oft viel einfacher, das Problem zu beheben.
Es funktioniert so. Sie beginnen mit den bisect Zustand zurückzusetzen und die aktuelle Version als schlecht markiert, da sie den Fehler enthält:
$ hg bisect --reset
$ hg bisect --bad
Sie dann in der Geschichte zurückspringen zu einem Punkt, wo Sie den Fehler Hoffnung nicht vorhanden ist:
$ hg update -r -100
89 files updated, 0 files merged, 30 files removed, 0 files unresolved
Sie haben Ihre Software bei dieser Revision zu prüfen und, wenn der Fehler nicht vorhanden ist, dann kann man es so gut markieren:
$ hg bisect --good
Testing changeset 11964:79bd860b8eb7 (81 changesets remaining, ~6 tests)
36 files updated, 0 files merged, 22 files removed, 0 files unresolved
wenn Sie es so gut markiert, Mercurial aktualisiert Ihre Arbeits Kopieren Sie einen Platz ungefähr in der Mitte zwischen den guten und den schlechten Changesets. Sie müssen dieses Changeset jetzt testen und gut/schlecht markieren.
$ hg bisect --good
Testing changeset 11985:81edef14922e (41 changesets remaining, ~5 tests)
23 files updated, 0 files merged, 26 files removed, 0 files unresolved
ich so weitermachen, bis Mercurial die Suche auf eine einzige changeset verringert hat:
$ 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 <[email protected]>
date: Wed Aug 18 05:55:56 2010 +0530
summary: tests: unify test-merge8
Sie immer noch das Debuggen von selbst zu tun haben, aber hg bisect
mit erspart Ihnen den Überblick über welche Change Sie haben bereits getestet und müssen noch getestet werden. Sie könnten dafür eine Reihe von Post-it-Notizen verwenden, aber es ist viel schöner, Mercurial dies tun zu lassen. Dies gilt insbesondere dann, wenn das Changeset-Diagramm aufgrund von Zusammenführungen nicht linear ist.
Alles in allem hilft hg bisect
Sie eine Suche nach einem fehlerhaften Changeset in logarithmischer Zeit, ohne dass Sie verfolgen müssen, wo Sie in der Suche sind.
Um in der Lage zu sein, ein Skript zu schreiben, um eine Revision zu testen, muss ich herausfinden, wo der Fehler ist und es testen. Was die Daten betrifft, kann ich sagen, ob ich etwas am 7/1 begangen habe und es wurde am 7/15 in unserer Produktionsumgebung veröffentlicht und ich muss einen Datenfix machen. Ich weiß, dass ich nur mit Daten arbeiten muss, die neuer als 7 sind. 15. All diese Informationen sind in Anmerkungen verfügbar, daher bin ich mir nicht sicher, wie halbiert wird. –
Es ist genau wie du sagst, du musst herausfinden wo der Fehler ist. Bisect hilft dabei. Wenn Sie wissen, dass alles vor 7/15 gut ist, müssen Sie immer noch den Changeset finden, der den Fehler nach 7/15 verursacht hat. Genau dafür ist bisect gut. Du gibst den Changeset um 7/15, von dem du weißt, dass es gut ist und der Kopf, der versagt und du kannst schnell eine binäre Suche machen, um den Schuldigen zu finden. –