Tal vez coincide con el código movidos y líneas modificadas que pueden ser mucho más lento
codymanix
Extraje un guión independiente para Patience Diff de Bazaar, puedes encontrarlo en otro hilo SO .
TryPyPy
38
Una pregunta de seguimiento. ¿Cuándo no debo usar la paciencia diff?
balki
44
También está el --histogramparámetro que "... extiende el algoritmo de paciencia para" admitir elementos comunes de baja ocurrencia " git-scm.com/docs/git-diff.html
Patience Diff, en cambio, enfoca 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. Todavía es una diferencia basada 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 ocurren exactamente una vez en ambos lados, luego haga la subsecuencia común más larga en esas líneas, uniéndolas.
¿Cuándo deberías usar la paciencia diff? Según Bram, la diferencia de paciencia es buena para esta situación:
Los casos realmente malos son aquellos en los que dos versiones han divergido dramáticamente y el desarrollador no tiene cuidado de mantener los tamaños de parches bajo control. En esas circunstancias, un algoritmo de diferencias puede ocasionalmente 'desalinearse' ya que coincide con secciones largas de llaves, pero termina correlacionando las llaves de funciones en una versión con las llaves de la siguiente función posterior en la otra versión. Esta situación es muy fea y puede dar como resultado un archivo de conflicto totalmente inutilizable en la situación en la que necesita que esas cosas se presenten de manera coherente.
En mi experiencia con XML por ahora, da exactamente los mismos resultados "malos" que un diferencial normal.
stivlo
55
He tenido mucha mejor suerte con la paciencia con XML; ciertamente, la diferencia que estoy viendo actualmente tiene exactamente el problema de desalineación descrito con el algoritmo de diferencia regular, pero se ve absolutamente grandioso con la diferencia de paciencia.
--histogram
parámetro que "... extiende el algoritmo de paciencia para" admitir elementos comunes de baja ocurrencia " git-scm.com/docs/git-diff.htmlRespuestas:
Puede leer una publicación de Bram Cohen , el autor del algoritmo de diferencia de paciencia, pero encontré esta publicación de blog para resumir muy bien el algoritmo de diferencia de paciencia:
¿Cuándo deberías usar la paciencia diff? Según Bram, la diferencia de paciencia es buena para esta situación:
fuente
También puede usarlo para fusiones (funcionó muy bien aquí para algunos conflictos XML):
fuente
git config --global diff.algorithm patience
git merge -X patience
.El algoritmo diff de paciencia es un algoritmo diff más lento que muestra mejores resultados en algunos casos.
Supongamos que tiene el siguiente archivo registrado en git:
Ahora reordenamos las secciones y agregamos una nueva línea:
El algoritmo de diferencias predeterminado afirma que los encabezados de sección han cambiado:
Mientras que la diferencia de paciencia muestra un resultado que podría decirse que es más intuitivo:
Aquí hay una buena discusión sobre la calidad subjetiva de diferencias , y git 2.11 está explorando aún más la heurística de diferencias .
Tenga en cuenta que el algoritmo de diferencia de paciencia todavía tiene algunos casos patológicos conocidos .
fuente