diffes un comando de shell que compara el contenido de archivos e informa las diferencias. El término diff también se usa para identificar la salida del comando y como verbo para ejecutarlo. Para comparar archivos, se ejecuta diff para crear una diferencia. [ 1 ]
Normalmente, el comando se usa para comparar archivos de texto , pero también admite la comparación de archivos binarios . Si uno de los archivos de entrada contiene datos no textuales, el comando usa por defecto el modo breve, informando solo un resumen de si los archivos difieren. Con la --textopción, siempre informa las diferencias línea por línea; sin embargo, la salida puede ser difícil de entender, ya que los datos binarios generalmente no están estructurados en líneas como el texto. [ 2 ]
Aunque el comando se usa principalmente de forma ad hoc para analizar cambios entre dos archivos, un uso especial es para crear un archivo de parche para usar con el patchcomando , que fue diseñado específicamente para usar un informe de salida de diff como archivo de parche. POSIX estandarizó los comandos diffy patchincluyendo su formato de archivo compartido. [ 3 ]
Historia
La utilidad diff original se desarrolló a principios de la década de 1970 para el sistema operativo Unix, en los laboratorios Bell en Murray Hill, Nueva Jersey. Formó parte de la quinta edición de Unix, lanzada en 1974, [ 4 ] y fue escrita por Douglas McIlroy y James Hunt . Esta investigación se publicó en un artículo de 1976 escrito en colaboración con James W. Hunt, quien desarrolló un prototipo inicial de diff . [ 5 ] El algoritmo descrito en este artículo se conoció como el algoritmo de Hunt-Szymanski .
El trabajo de McIlroy fue precedido e influenciado por el programa de comparación de Steve Johnson en GECOS y el programa de prueba de Mike Lesk . Proof también se originó en Unix y, al igual que diff , producía cambios línea por línea e incluso utilizaba corchetes angulares (">" y " < ") para indicar inserciones y eliminaciones de líneas en la salida del programa. Sin embargo, las heurísticas utilizadas en estas primeras aplicaciones se consideraron poco fiables. La utilidad potencial de una herramienta diff llevó a McIlroy a investigar y diseñar una herramienta más robusta para diversas tareas que pudiera funcionar bien bajo las limitaciones de procesamiento y tamaño del hardware del PDP-11 . Su enfoque del problema fue el resultado de la colaboración con personas de Bell Labs, incluidos Alfred Aho , Elliot Pinson, Jeffrey Ullman y Harold S. Stone.
En el contexto de Unix, el uso del editor de líneas `ed` proporcionó a `diff` la capacidad natural de crear "scripts de edición" utilizables por la máquina. Estos scripts, al guardarse en un archivo, pueden, junto con el archivo original, ser reconstruidos por `ed` para generar el archivo modificado en su totalidad. Esto redujo considerablemente el almacenamiento secundario necesario para mantener múltiples versiones de un archivo. McIlroy consideró escribir un postprocesador para `diff` que permitiera diseñar e implementar diversos formatos de salida; sin embargo, le pareció más económico y sencillo que `diff` se encargara de generar la sintaxis y la entrada en orden inverso aceptada por el comando `ed` .
En 1984, Larry Wall creó la utilidad patch (publicando su código fuente en los grupos de noticias mod.sources y net.sources [ 6 ] [ 7 ] [ 8 ] ) para parchear archivos de texto, utilizando la salida de diff más el archivo de entrada de diff con el contenido antes de los cambios para crear un archivo con el contenido después de los cambios.
La Guía de Portabilidad X/Open número 2 de 1987 incluye diff. El modo Contexto se agregó en POSIX.1-2001 (número 6). El modo Unificado se agregó en POSIX.1-2008 (número 7). [ 9 ]
En los primeros años de diff , los usos comunes incluían la comparación de cambios en el código fuente del software y el marcado para documentos técnicos, la verificación de la salida de depuración de programas, la comparación de listados del sistema de archivos y el análisis de código ensamblador de computadoras. La salida destinada a ed estaba motivada para proporcionar compresión para una secuencia de modificaciones realizadas a un archivo. [ 10 ] El Sistema de Control de Código Fuente (SCCS) y su capacidad para archivar revisiones surgieron a finales de la década de 1970 como consecuencia del almacenamiento de scripts de edición de diff .
Algoritmo
A diferencia de las nociones de distancia de edición utilizadas para otros fines, diffesta se centra en las líneas en lugar de en los caracteres, pero es similar a la distancia de Levenshtein en el sentido de que intenta determinar el conjunto más pequeño de eliminaciones e inserciones para crear un archivo a partir de otro.
La operación diff se basa en resolver el problema de la subsecuencia común más larga . [ 5 ] En este problema, dadas dos secuencias de elementos:
a b c d f g h j q z
a b c d e f g i j krxy z
y queremos encontrar la secuencia más larga de elementos que esté presente en ambas secuencias originales en el mismo orden. Es decir, queremos encontrar una nueva secuencia que se pueda obtener de la primera secuencia original eliminando algunos elementos y de la segunda secuencia original eliminando otros. También queremos que esta secuencia sea lo más larga posible. En este caso, es
abcdfgjz
A partir de la subsecuencia común más larga, es muy sencillo obtener un resultado similar al de diff : si un elemento no está presente en la subsecuencia pero sí en la primera secuencia original, debe haber sido eliminado (como indican los signos '-' a continuación). Si no está presente en la subsecuencia pero sí en la segunda secuencia original, debe haber sido insertado (como indican los signos '+').
ehiqkrxy + - + - + + + +
Usar
El diffcomando acepta dos argumentos, como por ejemplo: . Normalmente, cada argumento identifica archivos normales; sin embargo, si los dos argumentos identifican directorios, el comando compara los archivos correspondientes dentro de dichos directorios. Con la opción, recorre recursivamente los subdirectorios coincidentes para comparar los archivos con sus rutas relativas correspondientes.diff originalnew-r
Formato de salida predeterminado
El siguiente ejemplo muestra el contenido del archivo original y el nuevo, así como la diffsalida resultante en el formato predeterminado. La salida se muestra con colores para mejorar la legibilidad. GNU diff puede colorear la salida cuando --colorse usa la opción; cuando no --colorse especifica ninguna opción, la salida en color está deshabilitada de forma predeterminada. [ 11 ]
En este formato predeterminado, aindica añadido, dindica eliminado e cindica modificado. El número de línea del archivo original aparece antes del código de una letra, y el número de línea del nuevo archivo aparece después. Los signos menor que y mayor que (al principio de las líneas añadidas, eliminadas o modificadas) indican en qué archivo aparecen las líneas. Las líneas añadidas se agregan al archivo original y aparecen en el nuevo archivo. Las líneas eliminadas se borran del archivo original y no aparecen en el nuevo archivo.
Por defecto, las líneas comunes a ambos archivos no se muestran. Las líneas que se han movido se muestran como añadidas en su nueva ubicación y como eliminadas de su ubicación anterior. [ 12 ] Sin embargo, algunas herramientas de comparación resaltan las líneas movidas.
Editar script
Las versiones modernas de diff pueden generar un script de edición-e con la opción correspondiente. El script de edición resultante para este ejemplo es el siguiente:
24 aEste párrafo contiene importantes adiciones nuevas a este documento. . 17 c revise este documento. En . 11,15 d 0 a ¡ Este es un aviso importante ! Por lo tanto, debe ubicarse al principio de este documento. .
Para transformar el contenido del archivo original en el contenido del nuevo archivo usando ed , se agregan dos líneas a este archivo diff, una línea que contiene un comando (write) y otra que contiene un comando (quit) (por ejemplo, by ). Aquí le damos al archivo diff el nombre mydiff y la transformación ocurrirá cuando ejecutemos .wqprintf"w\nq\n">>mydiffed-soriginal<mydiff
Formato de contexto
La distribución Berkeley de Unix se empeñó en añadir el formato de contexto ( -c) y la capacidad de recursión en estructuras de directorios del sistema de archivos ( -r), añadiendo esas características en 2.8 BSD, publicado en julio de 1981. El formato de contexto de diff introducido en Berkeley ayudó a distribuir parches para código fuente que puede haber sido modificado mínimamente.
En el formato de contexto, las líneas modificadas se muestran junto con las líneas sin cambios anteriores y posteriores. La inclusión de cualquier número de líneas sin cambios proporciona contexto para el parche. El contexto consiste en líneas que no han cambiado entre los dos archivos y sirve como referencia para localizar las líneas en el archivo modificado y encontrar la ubicación prevista para aplicar el cambio, independientemente de si los números de línea siguen coincidiendo. El formato de contexto mejora la legibilidad para los usuarios y la fiabilidad al aplicar el parche, y genera una salida que se acepta como entrada para el programa de parcheo . Este comportamiento inteligente no es posible con la salida de diff tradicional.
El usuario puede definir el número de líneas sin cambios que se muestran encima y debajo de un bloque de cambios , incluso cero, aunque normalmente se muestran tres líneas por defecto. Si el contexto de las líneas sin cambios en un bloque se superpone con un bloque adyacente, diff evitará duplicar las líneas sin cambios y fusionará los bloques en uno solo.
Una " !" representa un cambio entre líneas que se corresponden en los dos archivos, mientras que una " +" representa la adición de una línea, y una " -" la eliminación de una línea. Un espacio en blanco representa una línea sin cambios. Al comienzo del parche se encuentra la información del archivo, incluyendo la ruta completa y una marca de tiempo delimitada por un carácter de tabulación. Al comienzo de cada fragmento se encuentran los números de línea que se aplican al cambio correspondiente en los archivos. Un rango de números que aparece entre conjuntos de tres asteriscos se aplica al archivo original; conjuntos de tres guiones se aplican al archivo nuevo. Los rangos de fragmentos especifican los números de línea inicial y final en el archivo respectivo.
El comando diff -c original newproduce la siguiente salida:
*** /ruta/a/la/marca de tiempo original --- /ruta/a/la/nueva marca de tiempo *************** *** 1,3 **** --- 1,9 ---- + ¡Este es un aviso importante! + Por lo tanto, debería estar ubicado al principio de este documento. + Esta parte del documento se ha mantenido igual de la versión a la *************** *** 8,20 **** Comprimir el tamaño de los cambios. - Este párrafo contiene - texto obsoleto. - Será eliminado en - un futuro próximo.Es importante la ortografía . ¡Revisa este documento! Por otro lado, una palabra mal escrita no es el fin del mundo. --- 14,21 ---- Comprime el tamaño de los cambios. Es importante revisar la ortografía. Por otro lado, una palabra mal escrita no es el fin del mundo. *************** *** 22,24 **** --- 23,29 ---- Este párrafo necesita ser modificado. Se pueden agregar cosas después. + + Este párrafo contiene + nuevas adiciones importantes + a este documento.Formato unificado
El formato unificado (o unidiff ) [ 13 ] [ 14 ] hereda las mejoras técnicas del formato de contexto, pero produce una diferencia más pequeña con el texto antiguo y el nuevo presentados inmediatamente uno al lado del otro. El formato unificado se suele invocar mediante la opción de línea de comandos-u " " . Esta salida se usa a menudo como entrada para el programa de parcheo . Muchos proyectos solicitan específicamente que las "diferencias" se envíen en formato unificado, lo que convierte al formato de diferencia unificada en el formato más común para el intercambio entre desarrolladores de software.
Las diferencias de contexto unificadas fueron desarrolladas originalmente por Wayne Davison en agosto de 1990 (en unidiff , que apareció en el volumen 14 de comp.sources.misc). Richard Stallman añadió soporte para diferencias unificadas a diff del Proyecto GNU un mes después. Esta característica debutó en GNU diff 1.15, publicado en enero de 1991. Desde entonces, GNU diff ha generalizado el formato de contexto para permitir un formato arbitrario de las diferencias.
El formato comienza con el mismo encabezado de dos líneas que el formato de contexto, excepto que el archivo original está precedido por "---" y el nuevo archivo está precedido por "+++A continuación, se incluyen uno o más bloques de cambios que contienen las diferencias de línea en el archivo. Un espacio precede a las líneas contextuales sin cambios, un signo más precede a las líneas de adición y un signo menos precede a las líneas de eliminación.
Un fragmento comienza con información de rango ; precede inmediatamente a las adiciones y eliminaciones de líneas, así como a cualquier número de líneas contextuales. La información de rango está rodeada por arroba doble y combina en una sola línea lo que aparece en dos líneas en el formato de contexto ( arriba ). El formato de la línea de información de rango es el siguiente:
@@ -l,s +l,s @@ encabezado de sección opcional
La información del rango de fragmento contiene dos rangos de fragmento. Un símbolo menos precede al rango del fragmento del archivo original, y un símbolo más precede al rango del archivo nuevo. Cada rango de fragmento tiene el formato l,s, donde l es el número de línea inicial y s es el número de líneas a las que se aplica el fragmento de cambio para cada archivo respectivo. En muchas versiones de GNU diff, cada rango puede omitir la coma y el valor final s , en cuyo caso s toma el valor predeterminado 1. Tenga en cuenta que el único valor realmente interesante es el número de línea l del primer rango; todos los demás valores se pueden calcular a partir de diff.
El rango de fragmentos del archivo original debe ser la suma de todas las líneas de fragmentos contextuales y de eliminación (incluidas las modificadas). El rango de fragmentos del archivo nuevo debe ser la suma de todas las líneas de fragmentos contextuales y de adición (incluidas las modificadas). Si la información del tamaño del fragmento no se corresponde con el número de líneas que contiene, la diferencia podría considerarse inválida y ser rechazada.
Opcionalmente, el rango del fragmento puede ir seguido del encabezado de la sección o función a la que pertenece. Esto es útil principalmente para facilitar la lectura de la diferencia. Al crear una diferencia con GNU diff, el encabezado se identifica mediante la coincidencia de expresiones regulares . [ 15 ]
Si se modifica una línea, se representa como una eliminación y una adición. Dado que los fragmentos del archivo original y del nuevo aparecen en el mismo bloque, dichos cambios aparecerían uno junto al otro. [ 16 ] Un ejemplo de esto en el siguiente caso es:
-consulta este documento. En +consulta este documento. En
El comando diff -u original newproduce la siguiente salida:
--- /ruta/a/la/marca de tiempo original +++ /ruta/a/la/nueva marca de tiempo @@ -1,3 +1,9 @@ +¡Este es un aviso importante! Por lo tanto, debería estar ubicado al principio de este documento. + Esta parte del documento se ha mantenido igual desde la versión hasta @@ -8,13 +14,8 @@ comprimir el tamaño de los cambios. -Este párrafo contiene -texto desactualizado. -Se eliminará en -un futuro próximo. - Es importante revisar la ortografía de este documento. En +revisar este documento. Por otro lado, una palabra mal escrita no es el fin del mundo. @@ -22,3 +23,7 @@ este párrafo necesita ser modificado. Se pueden agregar cosas después. + +Este párrafo contiene +importantes nuevas adiciones +a este documento.Para separar correctamente los nombres de archivo de las marcas de tiempo, se utiliza un carácter de tabulación como delimitador. Este carácter es invisible en pantalla y puede perderse al copiar y pegar las diferencias desde la consola o la terminal.
Extensiones
Existen algunas modificaciones y extensiones a los formatos diff que son utilizadas y comprendidas por ciertos programas y en determinados contextos. Por ejemplo, algunos sistemas de control de versiones , como Subversion , especifican un número de versión, una "copia de trabajo" o cualquier otro comentario en lugar de, o además de, una marca de tiempo en la sección de encabezado del diff.
Algunas herramientas permiten fusionar las diferencias de varios archivos diferentes en uno solo, utilizando un encabezado para cada archivo modificado que podría tener este aspecto:
Índice: ruta/al/archivo.cpp
El caso especial de archivos que no terminan en un salto de línea no se maneja. Ni unidiffel estándar POSIX diffdefine una forma de manejar este tipo de archivo. (De hecho, dichos archivos no son archivos de "texto" según las definiciones estrictas de POSIX. [ 17 ] ) GNU diff y git producen "\ No hay salto de línea al final del archivo" (o una versión traducida) como diagnóstico, pero este comportamiento no es portable. [ 18 ] GNU patch no parece manejar este caso, mientras que git-apply sí. [ 19 ]
El programa patch no necesariamente reconoce la salida de diff específica de la implementación. Sin embargo, GNU patch reconoce los parches de git y actuará de forma ligeramente diferente. [ 20 ]
Implementaciones y programas relacionados
Los cambios desde 1975 incluyen mejoras al algoritmo principal, la adición de características útiles al comando y el diseño de nuevos formatos de salida. El algoritmo básico se describe en los artículos An O(ND) Difference Algorithm and its Variations de Eugene W. Myers [ 21 ] y en A File Comparison Program de Webb Miller y Myers. [ 22 ] El algoritmo fue descubierto y descrito de forma independiente en Algorithms for Approximate String Matching , de Esko Ukkonen . [ 23 ] Las primeras ediciones del programa diff fueron diseñadas para comparaciones de líneas de archivos de texto, esperando que el carácter de nueva línea delimitara las líneas. En la década de 1980, la compatibilidad con archivos binarios cambió el diseño y la implementación de la aplicación.
GNU diff y diff3 están incluidos en el paquete diffutils junto con otras utilidades relacionadas con diff y patch . [ 24 ]
Formateadores y interfaces de usuario
Los postprocesadores sdiff y diffmk generan listados de diferencias en paralelo y aplican marcas de cambio a los documentos impresos, respectivamente. Ambos fueron desarrollados en otras áreas de Bell Labs en 1981 o antes.
Diff3 compara un archivo con otros dos mediante la conciliación de dos diferencias. Fue concebido originalmente por Paul Jensen para conciliar los cambios realizados por dos personas que editan un código fuente común. También lo utilizan los sistemas de control de versiones, por ejemplo, RCS , para la fusión . [ 25 ]
Emacs cuenta con Ediff , que muestra los cambios que proporcionaría un parche en una interfaz de usuario que combina la edición interactiva y las capacidades de fusión para archivos de parche.
Vim proporciona vimdiff para comparar de dos a ocho archivos, con las diferencias resaltadas en color. [ 26 ] Si bien históricamente invocaba el programa diff, el vim moderno utiliza la bifurcación de git del código de la biblioteca xdiff (LibXDiff), lo que proporciona mayor velocidad y funcionalidad. [ 27 ]
GNU Wdiff [ 28 ] es una interfaz para diff que muestra las palabras o frases que cambiaron en un documento de texto escrito, incluso en presencia de ajuste de línea o diferentes anchos de columna.
colordiff es una envoltura de Perl para 'diff' que produce la misma salida, pero con coloración para los bits añadidos y eliminados. [ 29 ] diff-so-fancy y diff-highlight son análogos más recientes. [ 30 ] "delta" es una reescritura en Rust que resalta los cambios y el código subyacente al mismo tiempo. [ 31 ]
Patchutils contiene herramientas que combinan, reorganizan, comparan y corrigen diferencias de contexto y diferencias unificadas. [ 32 ]
Derivadas algorítmicas
Las utilidades que comparan archivos fuente por su estructura sintáctica se han desarrollado principalmente como herramientas de investigación para algunos lenguajes de programación; [ 33 ] [ 34 ] [ 35 ] algunas están disponibles como herramientas comerciales. [ 36 ] [ 37 ] Además, las herramientas gratuitas que realizan comparaciones sintácticas incluyen:
- C++: zograscope, basado en AST. [ 38 ]
- HTML: Daisydiff, [ 39 ] diferencia html.
- XML: xmldiffpatch de Microsoft y xmldiffmerge para IBM. [ 40 ] [ 41 ]
- JavaScript : astii (basado en AST).
- Multilingüe: Pretty Diff (formato de código y luego diff) [ 42 ]
spiff es una variante de diff que ignora las diferencias en los cálculos de punto flotante con errores de redondeo y espacios en blanco , ambos generalmente irrelevantes para la comparación de código fuente. Bellcore escribió la versión original. [ 43 ] [ 44 ] Una versión para HPUX es la versión pública más reciente. spiff no admite archivos binarios. spiff genera la salida en la salida estándar en formato diff estándar y acepta entradas en los lenguajes de programación C , Bourne shell , Fortran , Modula-2 y Lisp . [ 45 ] [ 46 ] [ 43 ] [ 47 ] [ 44 ]
LibXDiff es una biblioteca LGPL que proporciona una interfaz a muchos algoritmos desde 1998. Originalmente se implementó un algoritmo Myers mejorado con huella digital de Rabin (hasta la versión final de 2008), [ 48 ] pero la bifurcación de git y libgit2 ha ampliado desde entonces el repositorio con muchos propios. Un algoritmo llamado "histogram" se considera generalmente mejor que el algoritmo Myers original, tanto en velocidad como en calidad. [ 49 ] [ 50 ] Esta es la versión moderna de LibXDiff utilizada por Vim. [ 27 ]
Véase también
- cmp – Comando de comparación de archivos
- Comparación de herramientas de comparación de archivos
- Codificación delta : tipo de método de transmisión de datos
- Operador de diferencia : patrón que define una secuencia infinita de números. Páginas que muestran descripciones breves de los destinos de redirección.
- Comparación de archivos : programa de línea de comandos que compara varios archivos.
- Historia de la gestión de la configuración del software
- Control de revisiones : gestión de versiones de código fuente o datos. Páginas que muestran descripciones breves de destinos de redireccionamiento.
- Gestión de la configuración del software : seguimiento y control de los cambios de software.
- WinDiff : programa de comparación de archivos de Microsoft.
- Regla Ramseyer : formato estándar para enmendar textos legales.
Referencias
- ↑ Eric S. Raymond (ed.), "diff" Archivado el 31/01/2014 en Wayback Machine , The Jargon File , versión 4.4.7
- ↑ MacKenzie et al. "Archivos binarios y comparación forzada de texto" en Comparación y fusión de archivos con GNU Diff y Patch . Descargado el 28 de abril de 2007.Archivado el 19 de diciembre de 2017 en Wayback Machine .
- ↑ IEEE Computer Society ; The Open Group (26 de septiembre de 2008). Estándar para la tecnología de la información : especificaciones básicas de la interfaz del sistema operativo portátil (POSIX), número 7. págs. 2599–2607 . La norma IEEE Std. 1003.1-2001 especifica los formatos de salida tradicionales, de "script ed" y de diferencia de contexto; la norma IEEE Std. 1003.1-2008 añadió el formato unificado (para entonces más común).
- ↑ "diff - comparación diferencial de archivos" . minnie.tuhs.org . Consultado el 25 de marzo de 2026 .
- 1 2 James W. Hunt; M. Douglas McIlroy (junio de 1976). "Un algoritmo para la comparación diferencial de archivos" ( PDF) . Informe técnico de ciencias de la computación, Laboratorios Bell . 41. Archivado (PDF) del original el 26 de diciembre de 2014. Recuperado el 6 de mayo de 2015 .
- ↑ Larry Wall (9 de noviembre de 1984). "Un aplicador de parches: ¡LO NECESITAS!" . Grupo de noticias : net.sources . Usenet: 1457@sdcrdcf.UUCP . Archivado del original el 19 de febrero de 2022. Recuperado el 11 de mayo de 2015 .
- ↑ Larry Wall (29 de noviembre de 1984). "Versión de parche 1.2: ¡LO QUIERES!" . Grupo de noticias : net.sources . Usenet: 1508@sdcrdcf.UUCP . Archivado del original el 21 de marzo de 2020. Consultado el 11 de mayo de 2015 .
- ↑ Larry Wall (8 de mayo de 1985). "Versión de parche 1.3" . Grupo de noticias : net.sources . Usenet: 813@genrad.UUCP . Archivado del original el 19 de febrero de 2022. Recuperado el 11 de mayo de 2015 .
- ↑ – Shell and Utilities Reference, The Single UNIX Specification , Versión 5 de The Open Group
- ↑ Ritchie, Dennis M.; Thompson, Ken (1974-07-01). "El sistema de tiempo compartido UNIX" . Commun. ACM . 17 (7): 365– 375. doi : 10.1145/361011.361061 . ISSN 0001-0782 .
- ↑ "Opciones de diff" . Manual de GNU Diffutils . Fundación del Software Libre . Consultado el 11 de junio de 2026 .
- ↑ David MacKenzie; Paul Eggert; Richard Stallman (1997). Comparación y fusión de archivos con GNU Diff y Patch . Bristol: Network Theory. ISBN 978-0-9541617-5-0Archivado del original el 31 de marzo de 2015. Consultado el 17 de marzo de 2015 .
- ↑ "Descripción detallada del formato unificado" . GNU Diffutils (versión 3.7, 7 de enero de 2018) . Archivado del original el 18 de enero de 2020. Consultado el 29 de enero de 2020 .
- ↑ van Rossum, Guido. "Formato de diferencia unificado" . Todo sobre Python . Archivado del original el 25 de diciembre de 2019. Consultado el 29 de enero de 2020 .
- ↑ 2.2.3 Mostrar en qué secciones se encuentran las diferencias , manual de GNU diffutils
- ↑ Formato de diferencias unificado por Guido van Rossum , 14 de junio de 2006
- ↑ http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_403 Archivado el 29/04/2013 en la Wayback Machine, sección 3.206
- ↑ "Líneas incompletas (comparación y fusión de archivos)" . www.gnu.org . Archivado del original el 8 de mayo de 2023. Consultado el 15 de junio de 2023 .
- ↑ "git: apply.c" . Git. 8 de mayo de 2023. Archivado del original el 13 de mayo de 2023. Recuperado el 15 de junio de 2023 .
- ↑ "patch.c\src - patch.git - Parche GNU" . git.savannah.gnu.org . Archivado del original el 8 de mayo de 2023. Recuperado el 15 de junio de 2023. En
las diferencias al estilo git, el estado "antes" de cada parche se refiere al estado inicial antes de modificar cualquier archivo.
- ↑ E. Myers (1986). "Un algoritmo de diferencia O(ND) y sus variaciones". Algorithmica . 1 (2): 251– 266. CiteSeerX 10.1.1.4.6927 . doi : 10.1007/BF01840446 . S2CID 6996809 .
- ↑ Webb Miller; Eugene W. Myers (1985). "Un programa de comparación de archivos". Software: Práctica y experiencia . 15 (11): 1025– 1040. CiteSeerX 10.1.1.189.70 . doi : 10.1002/spe.4380151102 . S2CID 15489614 .
- ↑ Esko Ukkonen (1985). "Algoritmos para la coincidencia aproximada de cadenas" . Information and Control . 64 ( 1–3 ): 100–118 . doi : 10.1016/S0019-9958(85)80046-2 .
- ↑ Utilidades GNU Diff. Archivado el 16 de marzo de 2015 en Wayback Machine . Proporcionado por la Free Software Foundation . Documentación gratuita. Código fuente gratuito.
- ↑ "merge (GNU RCS 5.10.0)" . gnu.org . Archivado del original el 18 de septiembre de 2019 . Recuperado el 22 de enero de 2021 .
- ↑ Moolenaar, Bram . "Documentación de Vim: diff" . vimdoc.sourceforge.net . Archivado del original el 16 de febrero de 2020. Consultado el 1 de mayo de 2020.
La forma más sencilla de empezar a editar en modo diff es con el comando "vimdiff". Esto inicia Vim como de costumbre y también lo configura para ver las diferencias entre los argumentos.
Esto es equivalente a:
vimdiff file1 file2 [file3] [file4] [...file8]vim -d file1 file2 [file3] [file4] [...file8] - 1 2 Brabandt, Christian (1 de diciembre de 2018). "El poder de diff" . Vimways . Archivado del original el 2 de diciembre de 2018. Recuperado el 1 de mayo de 2020 .
- ↑ "gnu.org" . gnu.org . Archivado del original el 11 de agosto de 2020. Consultado el 12 de septiembre de 2020 .
- ↑ "colordiff" . www.colordiff.org . Archivado del original el 14 de junio de 2018. Consultado el 14 de junio de 2018 .
- ↑ "diff-so-fancy" . So Fancy. 6 de mayo de 2023. Archivado del original el 8 de mayo de 2023. Recuperado el 8 de mayo de 2023 .
- ↑ Davison, Dan (8 de mayo de 2023). "dandavison/delta" . GitHub . Archivado del original el 8 de mayo de 2023. Recuperado el 8 de mayo de 2023 .
- ↑ Waugh, Tim (12 de junio de 2020). "twaugh/patchutils" . GitHub . Archivado del original el 1 de octubre de 2020. Recuperado el 28 de junio de 2020 .
- ↑ Horwitz, Susan (junio de 1990). "Identificación de las diferencias semánticas y textuales entre dos versiones de un programa" . ACM SIGPLAN Notices . 25 (6): 234– 245. CiteSeerX 10.1.1.49.3377 . doi : 10.1145/93548.93574 . Archivado del original el 12 de junio de 2010. Recuperado el 1 de noviembre de 2017 .
- ↑ Yang, Wuu (julio de 1991). "Identificación de diferencias sintácticas entre dos programas". Software: Practice and Experience . 21 (7): 739– 755. CiteSeerX 10.1.1.13.9377 . doi : 10.1002/spe.4380210706 . S2CID 10853673 .
- ↑ Grass. Cdiff: Una herramienta de comparación de diferencias dirigida por sintaxis para programas C++. Actas de la Conferencia USENIX C++, págs. 181-193, 1992.
- ↑ Compare++, http://www.coodesoft.com/ Archivado el 29/11/2011 en Wayback Machine
- ↑ SmartDifferencer, http://www.semanticdesigns.com/Products/SmartDifferencer Archivado el 14/10/2009 en Wayback Machine
- ↑ "xaizek/zograscope" . GitHub . 26 de mayo de 2020. Archivado del original el 21 de diciembre de 2020. Consultado el 27 de junio de 2020 .
- ↑ DaisyDiff , https://code.google.com/p/daisydiff/ Archivado el 19 de marzo de 2015 en Wayback Machine
- ↑ xmldiffpatch , http://msdn.microsoft.com/en-us/library/aa302294.aspx Archivado el 27/10/2009 en Wayback Machine
- ↑ xmldiffmerge , http://www.alphaworks.ibm.com/tech/xmldiffmerge Archivado el 24/09/2009 en Wayback Machine
- ↑ Cheney, Austin. Pretty Diff - Documentación . http://prettydiff.com/documentation.php Archivado el 31/07/2012 en Wayback Machine
- 1 2 dontcallmedotcom. "spiff" . GitHub . Archivado del original el 26-03-2015 . Recuperado el 16-06-2013 .
- 1 2 Nachbar, Daniel W (1999-12-01). "HP-UX Porting and Archiving" . Reino Unido. Archivado del original el 2012-09-05 . Recuperado el 2013-06-13 .
- ↑ "SPIFF 1" . 2 de febrero de 1988. Archivado del original el 2 de octubre de 2016. Consultado el 16 de junio de 2013 .
- ↑ Nachbar, Daniel W (1988-02-02). "Man page" . Reino Unido. Archivado del original el 10-09-2012 . Recuperado el 16-06-2013 .
- ↑ Davide (28-09-2009). "stackoverflow" . Archivado del original el 19-02-2022 . Consultado el 16-06-2013 .
- ↑ Libenzi, Davide. "LibXDiff" . SourceForge FreshMeat . Archivado del original el 1 de julio de 2020. Consultado el 28 de junio de 2020 .
- ↑ Nugroho, Yusuf Sulistyo; Hata, Hideaki; Matsumoto, Kenichi (enero de 2020). "¿Qué tan diferentes son los diferentes algoritmos de diff en Git?: Use --histogram para cambios de código" . Empirical Software Engineering : 790–823 . arXiv : 1902.02467 . doi : 10.1007/s10664-019-09772-z . S2CID 59608676 .
- ↑ "algoritmo - ¿Cuál es la diferencia entre 'git diff --patience' y 'git diff --histogram'?" . Stack Overflow . Archivado del original el 19/02/2022 . Consultado el 28/06/2020 .
Esto demuestra que histogram diff supera ligeramente a Myers, mientras que patience es mucho más lento que los demás.
Lecturas adicionales
- Paul Heckel (abril de 1978). "Una técnica para aislar diferencias entre archivos" . Communications of the ACM . 21 (4): 264– 268. doi : 10.1145/359460.359467 . S2CID 207683976 . Una técnica para aislar las diferencias entre archivos
- Implementación genérica del algoritmo Myers SES/LCS con refinamiento de espacio lineal de Hirschberg (código fuente en C).
Enlaces externos
- : comparar dos archivos – Referencia de Shell y Utilidades, Especificación UNIX Única , Versión 5 de The Open Group
- – Manual del programador de Plan 9 , Volumen 1
- – Manual de comandos generales de Inferno
- Implementación de JavaScript archivada
- Software de 1974
- Herramientas gratuitas para comparar archivos
- Lenguajes formales
- Coincidencia de patrones
- Diferenciación de datos
- Programas estándar de Unix
- Utilidades Unix SUS2008
- Órdenes del Plan 9
- Comandos de Inferno (sistema operativo)