Tengo el siguiente problema:
- la versión
master
funciona bien - la versión de la última etiqueta antes
master
(digamoslast
) tiene un error - un colega necesita un parche para su
last
revisión de ese cierto error
Bueno. Pidamos a nuestro amigo git bisect
la revisión que solucionó el error:
git bisect start
git bisect bad last
git bisect good master
Pero eso no va a funcionar:
Algunas buenas revoluciones no son antepasados de las malas rev.
git bisect no puede funcionar correctamente en este caso.
¿Quizás confundes buenas y malas revoluciones?
¿Alguna pista para superar esto? ¿Me perdí algo en los documentos?
git bisect run ...
para automatizar la bisección. Así que no tengo la oportunidad de intercambiar las palabrasgood
ybad
(eso era demasiado obvio). ¿Cómo utilizarrun
para encontrar la primera revisión buena?git bisect run
devuelve bueno o malo como código de salida, no como una cadena. Vea mi respuesta que acabo de publicar a continuación.Respuestas:
A partir de git 2.7, puedes usar los argumentos --term-old y --term-new.
Por ejemplo, puede identificar una confirmación de resolución de problemas así:
Mientras prueba, diga
git bisect fixed
ogit bisect unfixed
según corresponda.Respuesta anterior, para versiones de git anteriores a 2.7
En lugar de entrenarte temporalmente para pensar que malo significa bueno y bueno significa malo, ¿por qué no crear algunos alias?
En
~/.gitconfig
añada la siguiente:Puede comenzar a identificar una confirmación de resolución de problemas así:
Mientras prueba, diga
git bisect-fixed
ogit bisect-unfixed
según corresponda.fuente
is the first bad commit
, por lo que parece que todavía es necesario un entrenamiento temporal, ¿no?bisect-after = bisect bad
ybisect-before = bisect good
, según su recomendación. Ahora puedo usar cualquier conjunto de alias. Veremos cuál termino favoreciendo más después de algunos usos.Simplemente "engañaría" a git e intercambiaría significados de bueno <=> malo.
En otras palabras, considere "malo" como algo que no presenta el problema, por lo que esta no es la versión "buena" en la que basar su parche.
Bueno y malo son conceptos bastante subjetivos de todos modos, ¿verdad? :)
fuente
Si está usando
git bisect run
como lo he estado haciendo con elprove
comando de Perl (que ejecuta pruebas automáticas), no tiene posibilidad de intercambiargood
ybad
. El éxito de las pruebas se informará como código de salida.He encontrado una sintaxis de Bash válida para negar el código de salida del programa ejecutado por
git bisect run
:Esto me dio la primera revisión para pasar las pruebas realizadas
prove
.fuente
Git ahora le permite usar
old
ynew
sin definir primero de ellos. Tienes que llamargit bisect start
sin confirmaciones como argumentos adicionales, luego iniciar correctamente la bisección llamandohttps://git-scm.com/docs/git-bisect#_alternate_terms
Esto es esencialmente lo que @MarcH sugirió que se debería implementar.
fuente
git bisect start --term-new fixed --term-old broken
Alias Git son una buena idea, sin embargo, los términos
fixed
yunfixed
tener el mismo problema quegood
ebad
: no se puede tener ellos sean compatibles con ambas regresiones y progresiones. Es fácil encontrar palabras que funcionen de cualquier manera: simplemente retírelas de la terminología de búsqueda binaria original, que es de naturaleza neutral sin preconcepción de lo que es bueno o malo. Por ejemplo:Con términos neutrales como estos, siempre puede escribir:
git bisect-high
(ogit bisect-upper
, ogit-bisect max
, ... ¡su elección!) Ya sea que esté buscando una regresión o una solución .Lástima que los desarrolladores de git bisect no pudieran simplemente reutilizar cualquiera de los términos existentes. La interfaz de usuario no es una preocupación de git en general: http://stevebennett.me/2012/02/24/10-things-i-hate-about-git/
fuente