J'ai le problème suivant:
- la version
master
fonctionne bien - la version de la dernière balise avant
master
(disonslast
) a un bogue - un collègue a besoin d'un correctif pour sa
last
révision pour ce bogue précis
D'accord. Demandons à notre ami git bisect
la révision qui a corrigé le bogue:
git bisect start
git bisect bad last
git bisect good master
Mais cela ne fonctionnera pas:
Certains bons régimes ne sont pas les ancêtres des mauvais régimes.
git bisect ne peut pas fonctionner correctement dans ce cas.
Peut-être confondez-vous les bons et les mauvais régimes?
Des conseils pour surmonter cela? Ai-je manqué quelque chose dans la documentation?
git bisect run ...
pour automatiser la bissectrice. Je n'ai donc aucune chance d'échanger les motsgood
etbad
(c'était trop évident). Comment utiliserrun
pour trouver la première bonne révision?git bisect run
renvoie bon ou mauvais en tant que code de sortie, pas en tant que chaîne. Voir ma réponse que je viens de publier ci-dessous.Réponses:
Depuis git 2.7, vous pouvez utiliser les arguments --term-old et --term-new.
Par exemple, vous pouvez identifier un commit de résolution de problèmes ainsi:
Au fur et à mesure que vous testez, dites
git bisect fixed
ougit bisect unfixed
selon le cas.Ancienne réponse, pour les versions de git antérieures à 2.7
Au lieu de vous entraîner temporairement à penser que mauvais signifie bon et bon signifie mauvais, pourquoi ne pas créer des alias?
En
~/.gitconfig
ajouter ce qui suit:Vous pouvez commencer à identifier un commit de résolution de problèmes ainsi:
Au fur et à mesure que vous testez, dites
git bisect-fixed
ougit bisect-unfixed
selon le cas.la source
is the first bad commit
, il semble donc qu'une formation temporaire soit toujours nécessaire, non?bisect-after = bisect bad
etbisect-before = bisect good
, conformément à votre recommandation. Maintenant, je peux utiliser l'un ou l'autre ensemble d'alias. Nous verrons ce que je finis par privilégier le plus après quelques utilisations.Je "tricherais" simplement et j'échangerais les significations du bon <=> mauvais.
En d'autres termes, considérez «mauvaise» comme quelque chose qui ne présente pas le problème, donc ce n'est pas la «bonne» version sur laquelle baser votre patch.
De toute façon, le bien et le mal sont des concepts assez subjectifs, non? :)
la source
Si vous utilisez
git bisect run
comme je l'ai fait avec laprove
commande de Perl (qui exécute des tests automatiques), vous n'avez aucune chance de simplement échangergood
etbad
. Le succès des tests sera signalé comme code de sortie.J'ai trouvé une syntaxe Bash valide pour annuler le code de sortie du programme exécuté par
git bisect run
:Cela m'a donné la première révision pour réussir les tests effectués
prove
.la source
Git vous permet maintenant de les utiliser
old
etnew
sans les définir au préalable. Vous devez appelergit bisect start
sans commits comme arguments supplémentaires, puis démarrer correctement la bissection en appelanthttps://git-scm.com/docs/git-bisect#_alternate_terms
C'est essentiellement ce que @MarcH suggérait de mettre en œuvre.
la source
git bisect start --term-new fixed --term-old broken
Les alias Git sont une bonne idée, mais les termes
fixed
etunfixed
ont le même problème quegood
etbad
: vous ne pouvez pas les rendre compatibles avec les régressions et les progressions. Il est facile de trouver des mots qui fonctionnent dans les deux sens: il suffit de les sélectionner dans la terminologie de recherche binaire originale qui est de nature neutre sans préjugé de ce qui est bon ou mauvais. Par exemple:Avec des termes neutres comme ceux-ci, vous pouvez toujours taper:
git bisect-high
(ougit bisect-upper
, ougit-bisect max
, ... votre choix!) Si vous recherchez une régression ou une correction .Dommage que les développeurs de git bisect ne puissent pas simplement réutiliser l'un des termes existants. L'interface utilisateur n'est pas la préoccupation de git en général: http://stevebennett.me/2012/02/24/10-things-i-hate-about-git/
la source