ver tipos tag modificados log example etiquetas crear comandos archivos git diff

tipos - ¿Para qué sirve `git diff--patience`?



git ver archivos modificados (3)

El algoritmo de diferencia de paciencia es un algoritmo de diferencia más lento que muestra mejores resultados en algunos casos.

Supongamos que tiene el siguiente archivo registrado en git:

.foo1 { margin: 0; } .bar { margin: 0; }

Ahora reordenamos las secciones y agregamos una nueva línea:

.bar { margin: 0; } .foo1 { margin: 0; color: green; }

El algoritmo diff predeterminado afirma que los encabezados de sección han cambiado:

$ git diff --diff-algorithm=myers diff --git a/example.css b/example.css index 7f1bd1e..6a64c6f 100755 --- a/example.css +++ b/example.css @@ -1,7 +1,8 @@ -.foo1 { +.bar { margin: 0; } -.bar { +.foo1 { margin: 0; + color: green; }

Mientras que la diferencia de paciencia muestra un resultado que es posiblemente más intuitivo:

$ git diff --diff-algorithm=patience diff --git a/example.css b/example.css index 7f1bd1e..6a64c6f 100755 --- a/example.css +++ b/example.css @@ -1,7 +1,8 @@ -.foo1 { - margin: 0; -} - .bar { margin: 0; } + +.foo1 { + margin: 0; + color: green; +}

Hay fabiensanglard.net/git_code_review/diff.php , y git 2.11 está explorando las heurísticas de la diferencia .

Tenga en cuenta que el algoritmo de paciencia aún tiene algunos casos patológicos conocidos .

¿En qué se diferencia el algoritmo de paciencia del algoritmo git diff predeterminado, y cuándo querría usarlo?


Puedes leer una publicación de Bram Cohen , el autor del algoritmo de diferencia de paciencia, pero encontré esta publicación del blog para resumir muy bien el algoritmo de diferencia de paciencia:

Patience Diff, en cambio, concentra su energía en las líneas de baja frecuencia y alto contenido que sirven como marcadores o firmas de contenido importante en el texto. Sigue siendo un diff basado en LCS en su núcleo, pero con una diferencia importante, ya que solo considera la subsecuencia común más larga de las líneas de firma:

Encuentre todas las líneas que aparecen exactamente una vez en ambos lados, luego haga la subsecuencia común más larga en esas líneas, haciéndolas coincidir.

¿Cuándo deberías usar la paciencia? Según Bram, la paciencia es buena para esta situación:

Los casos realmente malos son aquellos en los que dos versiones se han desviado drásticamente y el desarrollador no está teniendo cuidado de mantener los tamaños de parches bajo control. Bajo esas circunstancias, un algoritmo de diferencia puede ocasionalmente ''desalinearse'' porque hace coincidir largas secciones de llaves, pero termina correlacionando las llaves de funciones en una versión con las llaves de la siguiente función en la otra versión. Esta situación es muy desagradable y puede resultar en un archivo de conflicto totalmente inutilizable en la situación en la que necesita que las cosas se presenten más coherentemente.


También puede usarlo para fusiones (funcionó muy bien aquí para algunos conflictos XML):

git merge --strategy-option=patience ...