Ich habe folgendes Problem:
- Die Version bei
master
funktioniert gut - Die Version des letzten Tags vor
master
(sagen wirlast
) hat einen Fehler - Ein Kollege benötigt einen Patch für seine
last
Überarbeitung für diesen bestimmten Fehler
In Ordnung. Fragen wir unseren Freund git bisect
nach der Revision, mit der der Fehler behoben wurde:
git bisect start
git bisect bad last
git bisect good master
Aber das wird nicht funktionieren:
Einige gute Drehzahlen sind keine Vorfahren der schlechten Drehzahl.
Git Bisect kann in diesem Fall nicht richtig funktionieren.
Vielleicht verwechseln Sie gute und schlechte Drehzahlen?
Irgendwelche Hinweise, um dies zu überwinden? Habe ich etwas in den Dokumenten verpasst?
git bisect run ...
um die Halbierung zu automatisieren. Ich habe also keine Chance, nur die Wörter zu tauschengood
undbad
(das war zu offensichtlich). Wierun
finde ich die erste gute Revision?git bisect run
gibt gut oder schlecht als Exit-Code zurück, nicht als Zeichenfolge. Siehe meine Antwort, die ich gerade unten gepostet habe.Antworten:
Ab Git 2.7 können Sie die Argumente --term-old und --term-new verwenden.
Zum Beispiel können Sie ein Commit zur Problembehebung folgendermaßen identifizieren:
Sagen Sie beim Testen
git bisect fixed
odergit bisect unfixed
nach Bedarf.Alte Antwort für Versionen von Git vor 2.7
Anstatt sich vorübergehend zu trainieren, zu denken, dass schlecht gut und gut schlecht bedeutet, sollten Sie einige Aliase erstellen.
In
~/.gitconfig
fügen Sie die folgende:Sie können ein Commit zur Problembehebung folgendermaßen identifizieren:
Sagen Sie beim Testen
git bisect-fixed
odergit bisect-unfixed
nach Bedarf.quelle
is the first bad commit
, sodass immer noch foo gemeldet wird. Es scheint also, dass eine vorübergehende Schulung weiterhin erforderlich ist, nicht wahr?bisect-after = bisect bad
undbisect-before = bisect good
gemäß Ihrer Empfehlung verwendet. Jetzt kann ich beide Aliase verwenden. Wir werden sehen, welche ich nach ein paar Anwendungen am Ende mehr bevorzuge.Ich würde nur git "betrügen" und Bedeutungen von gut <=> schlecht tauschen.
Mit anderen Worten, betrachten Sie "schlecht" als etwas, das das Problem nicht aufweist, sodass dies nicht die "gute" Version ist, auf der Ihr Patch basiert.
Gut und Böse sind sowieso ziemlich subjektive Konzepte, oder? :) :)
quelle
Wenn Sie verwenden ,
git bisect run
wie ich mit Perl zu tunprove
Befehl (die automatischen Tests läuft) haben Sie keine Chance nur zu tauschengood
undbad
. Der Erfolg der Tests wird als Exit-Code gemeldet.Ich habe eine gültige Bash-Syntax gefunden, um den Exit-Code des Programms zu negieren, das ausgeführt wird von
git bisect run
:Dies gab mir die erste Überarbeitung, die die durchgeführten Tests bestand
prove
.quelle
Git jetzt können Sie verwenden ,
old
undnew
ohne sie vorher zu definieren. Sie müssengit bisect start
ohne Commits als weitere Argumente aufrufen und dann die Halbierung ordnungsgemäß durch Aufrufen startenhttps://git-scm.com/docs/git-bisect#_alternate_terms
Dies ist im Wesentlichen das, was @MarcH vorgeschlagen hat, implementiert zu werden.
quelle
git bisect start --term-new fixed --term-old broken
Git - Aliase sind eine gute Idee, aber die Bedingungen
fixed
undunfixed
haben das gleiche Problem alsgood
undbad
: Sie können sie mit nicht haben vereinbar beiden Regressionen und Progressionen. Es ist einfach, Wörter zu finden, die in beide Richtungen funktionieren: Nehmen Sie sie einfach aus der ursprünglichen binären Suchterminologie auf, die von Natur aus neutral ist, ohne Vorurteile darüber, was gut oder schlecht ist. Zum Beispiel:Mit solchen neutralen Begriffen können Sie immer Folgendes eingeben:
git bisect-high
(odergit bisect-upper
, odergit-bisect max
, ... Ihre Wahl!), Ob Sie nach einer Regression oder einem Fix suchen .Schade, dass die Entwickler von git bisect keinen der vorhandenen Begriffe einfach wiederverwenden konnten. Die Benutzeroberfläche ist im Allgemeinen kein Problem von git: http://stevebennett.me/2012/02/24/10-things-i-hate-about-git/
quelle