Compartido
VPS
Dedicado
WP Profesional
WP Profesional Plus
La herramienta «diff» calcula las diferencias entre dos archivos de texto. Esa diferencia se llama parche. Puedes aplicar un parche a otro archivo usando la herramienta «patch».
Diff y patch están pensados para ser usados en archivos de texto. Los archivos que son binarios o manipulados por aplicaciones creadas al efecto, como los archivos .doc, .pdf, .xlsx o .wav, no funcionan bien con diff y patch.
¿Por qué usar diff y patch?
Razón 1: diff puede ser útil por sí mismo para ver lo que ha cambiado entre archivos, incluso si nunca usas patch.
Razón 2: a veces puedes conseguir parches de terceros y aplicarlos a tus archivos. Esto puede ser beneficioso en los casos en que los archivos que se parchean son grandes, pero el número de cambios es relativamente pequeño: transferir un archivo de parche es más eficiente que transferir el archivo completo.
Razón 3: Puede aplicar parches a archivos que no coinciden perfectamente con el archivo original utilizado en diff.
Por ejemplo, si utiliza un CMS con un archivo de configuración, y realiza modificaciones locales en ese archivo de configuración, quiere preservar esos cambios locales cuando actualice su CMS. Copiar la nueva configuración del proveedor sobre su versión perderá sus cambios. Sin embargo, en muchos casos, usted puede utilizar con seguridad el parche para aplicar los cambios del proveedor de la versión más reciente sin perder sus propios cambios.
¿Qué es diff?
diff es una forma de comparar archivos para las diferencias (de ahí el nombre «diff») desde la línea de comandos. Por ejemplo, si tienes un archivo original, luego haces algunos cambios y lo guardas con otro nombre, podrías comparar los dos usando diff.
Sintaxis de diff
diff se usa en la línea de comandos. La sintaxis básica de diff tiene el siguiente aspecto:
diff
Este comando establece la estructura básica para comparar un archivo con otro. También hay opciones para añadir más funcionalidad a un comando.
Sintaxis básica (sin opciones)
Sustituye y por los nombres reales de los archivos. Asegúrese de incluir las extensiones de los archivos con los nombres de los mismos. Un comando diff básico sin opciones puede ser algo así:
diff file1.html file2.html
En este ejemplo, el comando compararía el archivo1.html y el archivo2.html y emitiría las diferencias en la línea de comandos.
Sintaxis de diff (con opciones)
Las opciones de diff añaden más funcionalidad a los comandos. Sin embargo, las opciones cambiarán un poco la sintaxis del comando.
Las opciones de diff van entre diff y el primer nombre de archivo:
diff -y file1.html file2.html
También puede combinar múltiples opciones en un comando. Hazlo añadiendo todas las letras de las opciones pertinentes después del guión (-). Acabará pareciendo algo así:
diff -uy file1.html file2.html
También puedes ver una variación que da a cada opción su propio guión (-). Ambos métodos de añadir múltiples opciones son válidos
diff -u -y file1.html file2.html
Vea a continuación una lista de opciones de uso común:
Descripción | |
-N | Ignora los archivos ausentes | -r | Ejecuta recursivamente diff a través de un directorio. Se utiliza para comparar varios archivos a la vez. Nota: no es lo mismo que -R, que es una opción de parche |
-u | Muestra la salida en un formato más fácil de leer. Esto puede eliminar alguna información, como las líneas de contexto. |
-y | Forza la salida para mostrar las diferencias una al lado de la otra. |
Para más opciones, vea esta lista de opciones de diff de GNU.
Salida de diff
Cuando se ejecuta un comando diff, la salida básica será similar a esta:
El uso de la opción -y cambiará la forma en que se muestra la salida
11c11< this is text from the original file---> this is the same line from the second, changed file
Sólo se mostrarán los cambios en la salida, por lo que no tiene que escudriñar los dos archivos. En su lugar, diff compara y saca los cambios para que los veas.
Los caracteres «>» y «<» en la salida de diff apuntan a la dirección del archivo en el que se encuentra el contenido. Así, para el comando «diff archivo1 archivo2», un «<» se refiere a las líneas del archivo1 y «>» se refiere a las líneas del archivo2.
Cómo leer la salida de diff
Aquí tienes una breve guía sobre cómo leer la salida de diff.
La primera línea de salida
La primera línea de la salida indica los números de línea que contienen diferencias y el tipo de cambios que se han realizado.
Si dos números están separados por una coma, significa que hay cambios desde el primer número de línea hasta el segundo. En la imagen de ejemplo anterior, 11,12 indicaría que hay cambios en las líneas 11 – 12.
La «c» que separa los números de línea en el ejemplo anterior indica el tipo de cambio que se ha producido. Hay diferentes letras que indican diferentes tipos de cambios:
Letra | Significado |
Contento fue reemplazado | |
a | Se ha añadido o anexado contenido |
d |
Cuando se utiliza el parche, que se explicará en la sección ¿Qué es el parche? estas letras serán importantes.
El resto de la salida
El resto de la salida se refiere a las diferencias reales entre archivos.
Las líneas modificadas aparecerán junto a los corchetes angulares < o >. Tres guiones (—) indican que cambia el final de la línea del primer archivo y el comienzo de la del siguiente. El aspecto será el siguiente:
< text from file one---> text from file two
Ahora que tienes una comprensión básica de diff, es hora de pasar a patch.
¿Qué es patch?
atch es un comando que toma la salida del diff y la pone en un archivo. Luego, puede tomar la salida archivada y sobrescribir otro archivo con los cambios. Por ejemplo, un uso común es utilizar el parche para transferir los cambios del archivo modificado al archivo original, haciéndolos así idénticos. Aunque esto también se puede lograr copiando/pegando el archivo actualizado en el archivo original, el parche es mucho más rápido y eficiente.
Cómo usar diff y patch juntos
diff funciona catalogando los cambios entre los dos archivos o carpetas. Patch puede tomar esos cambios, ponerlos en un archivo y actualizar las versiones anteriores con él.
Opciones de patch
El comando patch también tiene su propio conjunto de opciones para añadir funcionalidad. Encuentre una lista de las opciones más utilizadas a continuación:
-b | Crea una copia de seguridad del archivo original | -i | Forza al comando a leer el parche desde el archivo .patch en lugar de desde la entrada estándar | -p | Indica al comando que elimine # número de barras del camino del archivo al nombre del archivo. Verás que en la mayoría de nuestros ejemplos, usamos -p0 para que no se eliminen las barras |
-R | Revisa el parche anterior |
-s | Ejecuta el comando en silencio. Sólo mostrará el proceso si hay errores |
Para más opciones, vea esta lista de opciones de parche de GNU.
Crear un parche
Crear un archivo de parche es el primer paso para usar patch y diff juntos. El archivo de parche se puede utilizar para añadir cambios a otros archivos, por lo que es necesario para comandos como Sobrescribir el archivo original con los cambios.
Para crear un archivo de parche, introduzca el siguiente comando en la línea de comandos:
diff -u file1.html file2.html > patchfile.patch
En el ejemplo anterior, la salida de diff se guardará en un archivo llamado patchfile.patch. Cuando ejecute el comando, asegúrese de cambiar archivo1.html y archivo2.html por los nombres reales de los archivos.
Sobreescribir archivos con cambios
Una vez creado el archivo de parche, puede utilizarlo para copiar los cambios en otro archivo. Por ejemplo, puede querer sobrescribir el archivo1 con los cambios del archivo2 actualizado. Para ello, podría utilizar una sintaxis como la siguiente:
patch file1.html patchfile.patch
Reemplace el archivo1.html con su archivo original. Esto sobrescribiría el contenido antiguo de archivo1.html con el contenido cambiado de archivo2.html.
Cómo revertir un parche
Si quieres revertir el archivo a su versión anterior antes de parchearlo, puedes hacerlo ejecutando este comando:
patch -p0 -R -i patchfile.patch
La línea de comandos le pedirá que introduzca el nombre del archivo que desea revertir. Una vez introducido el nombre del archivo, comenzará el proceso de reversión. Si tiene éxito, el archivo será revertido a su estado anterior.
Patch Directorios
Usar diff y patch en directorios completos es un proceso similar al de usarlo en archivos individuales.
El primer paso es crear un archivo de parche utilizando el comando:
diff -ruN folder1/ folder2/ > patchfile.patch
A continuación, se emitiría el comando para parchear la carpeta original, que en este caso es la carpeta1:
patch -s -p0 < patchfile.patch
Si tiene éxito, su directorio original debería estar ahora actualizado para coincidir con la segunda carpeta actualizada.