tag - ¿El mal se funde en git?
git tag best practices (4)
Creo que podría llamarse ''malvado fusión'' porque es un caso difícil en la esquina para que "git Culpe" se resuelva cuando se anota un archivo (generando anotaciones en el historial de líneas).
La combinación de maldad puede ser necesaria cuando desarrolló la función ''A'' en la rama principal y la función ''B'' en la rama lateral, y esas funciones entran en conflicto de manera semántica (no textual). Un ejemplo sería usar el mismo nombre para la variable global, con diferentes significados; esto requiere cambiar el nombre de la variable para una de las características.
Para la combinación malvada, " git show --cc
" tiene una combinación combinada no vacía (pero no estoy seguro de que sea una relación de equivalencia; la implicación podría estar en una sola dirección, es decir, "fusión malvada" y luego no vacía " git diff-tree -p --cc
").
"man gitglossary " contiene esta definición de fusión malvada :
Una combinación malvada es una combinación que introduce cambios que no aparecen en ningún padre.
No estoy seguro de entender el punto al que los autores están tratando de llegar. ¿Por qué es malo?
En palabras del propio Linus Torvalds (tomado de la lista de correo de git ):
una "fusión malvada" es algo que hace cambios que provienen de ninguna de las partes y que en realidad no resuelven un conflicto
Porque es poner las cosas en el código que nadie pidió estar allí. Como si tuvieras este código:
$foo = bar;
$baz = qxx;
y este cambio:
$foo = bar;
$foo++;
$baz = qxx;
se fusionó con este cambio:
$foo = bar;
$foo--;
$baz = qxx;
de una manera que de alguna manera produjo:
$foo = bar;
$foo++;
$foo--;
--$baz;
$baz = qxx;
Claramente, esto es malo.
Supongo que es lo suficientemente preocupante para estar en man gitglossary
porque cuanto más comprometidos estén sus algoritmos de fusión, más probable es que produzcan tal cosa.
Vale la pena mencionar que un "cambio malvado" de una "fusión malvada" puede perderse silenciosamente mientras se rebasa una "fusión malvada" que contiene un "cambio malvado" que no entra en conflicto con otros compromisos. El uso de --preserve-merges
no ayuda en tal caso .