GNU/Linux >> Tutoriales Linux >  >> Linux

Colaborar en un archivo usando Linux diff y patch

Edito muchos archivos de texto. A veces es código. Otras veces es la palabra escrita para juegos de rol (RPG), libros de programación o correspondencia general. A veces es bueno hacer un cambio, pero que mi colaborador compare mi cambio con lo que había escrito originalmente. Muchas personas utilizan de forma predeterminada las suites ofimáticas, como LibreOffice, utilizando comentarios o funciones de seguimiento de cambios. Sin embargo, a veces una herramienta más simple tiene más sentido, y para eso, puede consultar el historial de programación para herramientas como diff y patch , que proporcionan un formato estandarizado para realizar un seguimiento y aplicar cambios a los archivos compartidos.

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

Incluso con un archivo simple, hay complejidad en la sincronización de dos documentos. Algunos elementos se modifican, otros se dejan solos, se agrega contenido nuevo y algunos permanecen igual pero se mueven a diferentes lugares en el documento. Es difícil replicar cambios sin aceptar felizmente que todos los cambios son igualmente válidos y reemplazar el archivo antiguo por el nuevo. También es monolíticamente opaco. Hay tantos cambios que es difícil identificar exactamente qué ha cambiado.

Con la diff comando, puede crear un registro de cómo ha cambiado el archivo, y con patch puede "reproducir" esos cambios sobre la versión anterior para actualizarla con la nueva versión.

Configuración

Suponga que usted y yo estamos colaborando en un archivo que describe cómo hacer una taza de té.



Hasta ahora, el archivo tea.md contiene copiar y pegar sin formato:

Boil water.
Warm the teapot.
Add tea and water to the teapot.
Place a tea cosy over the teapot.
Steep for 6 minutes.
Pour tea into cup.
Add milk.

Parece razonable, pero siempre hay optimizaciones que puedes hacer, así que me envías el archivo para mejorarlo. En un esfuerzo por aclarar el proceso de elaboración del té, copio el archivo como tea-revision.md y edítelo, terminando con esto:

Warm a teapot in the proving drawer of your oven.
Boil water.
Add tea leaves to a tea strainer.
Add strainer and water to teapot.
Steep for 6 minutes. Keep it warm with a tea cosy.
Pour tea into cup.
Optionally, add warm milk.

Como era de esperar, algunos artículos (Boil water y Pour tea into cup ) no cambian, mientras que otras líneas (Warm the teapot ) han tenido adiciones. Algunas líneas son completamente nuevas y otras son iguales pero en un orden diferente.

Crear una diferencia

La diff La herramienta muestra la diferencia entre dos archivos. Hay algunas formas diferentes de ver los resultados, pero creo que la más clara es --unified (-u para abreviar), que muestra qué líneas se agregaron o restaron. Una línea que cambia de alguna manera se trata como una línea que se restó y luego se agregó. Por defecto, diff imprime su salida en el terminal.

Proporcione diff con el archivo antiguo y luego con el nuevo archivo:

$ diff --unified tea.md tea-revised.md 
--- tea.md      2021-11-13 10:26:25.082110219 +1300
+++ tea-revised.md      2021-11-13 10:26:32.049110664 +1300
@@ -1,7 +1,7 @@
+Warm a teapot in the proving drawer of your oven.
 Boil water.
-Warm the teapot.
-Add tea and water to the teapot.
-Place a tea cosy over the teapot.
-Steep for 6 minutes.
+Add tea leaves to a tea strainer.
+Add strainer and water to teapot.
+Steep for 6 minutes. Keep it warm with a tea cosy.
 Pour tea into cup.
-Add milk.
+Optionally, add warm milk.

Un signo más (+ ) al comienzo de una línea indica algo que se agregó al archivo anterior. Un signo menos (- ) al comienzo de una línea indica una línea que se eliminó o cambió.

Crear un parche con diff

Un archivo de parche es solo la salida de diff --unified comando colocado en un archivo. Puede hacer esto usando la redirección estándar de Bash:

$ diff -u tea.md tea-revised.md > tea.patch

El contenido del archivo es exactamente el mismo que el que se envió al terminal. Me gusta ver los archivos de parches en Emacs, que codifica con colores cada línea dependiendo de si se agrega o resta.

Aplicando cambios con parche

Una vez que tenga un archivo de parche, podría enviárselo para que lo revise y, opcionalmente, lo aplique a su archivo anterior. Aplicas un parche con el patch comando:

$ patch tea.md tea.patch

Se agregaron líneas, se restaron líneas y, al final, terminas con un archivo idéntico a mi versión:

$ cat tea.md
Warm a teapot in the proving drawer of your oven.
Boil water.
Add tea leaves to a tea strainer.
Add strainer and water to teapot.
Steep for 6 minutes. Keep it warm with a tea cosy.
Pour tea into cup.
Optionally, add warm milk.

No hay límite en la cantidad de veces que puede parchear un archivo. Podría repetir mis cambios, generar un nuevo parche y enviármelo para que lo revise. El envío de cambios en lugar de resultados permite a cada colaborador revisar qué cambió, decidir qué desea mantener o eliminar y documentar con precisión el proceso.

Instalar

En Linux y macOS, ya tiene ambos diff y patch comandos En Windows, puede obtener diff y patch a través de Cygwin, o use Chocolatey para buscar difutils y parches.

Si alguna vez ha intentado colaborar en archivos por correo electrónico o chat, y se ha encontrado tratando de describir donde necesites hacer un cambio, entonces te encantará diff y patch . Un archivo cuidadosamente estructurado, como un código o Markdown delimitado por líneas, es fácil de diferenciar, parchear y mantener.


Linux
  1. ¿Cómo descomprimir el formato de archivo .xz en Linux usando las utilidades tar y xz?

  2. Cómo cifrar y descifrar archivos/carpetas en Linux usando GnuPG

  3. Cómo cifrar y descifrar un archivo usando GnuPG en Linux

  4. Cómo crear y aplicar parches en GIT usando diff y aplicar el comando

  5. 7 ejemplos de comandos de parches para aplicar archivos de parches de diferencias en Linux

Cómo usar el comando diff de Linux

Cómo grabar y reproducir sesiones de terminal de Linux usando los comandos 'script' y 'scriptreplay'

Todo sobre archivos tar y cómo tar, untar archivos en Linux usando Terminal

Cómo borrar de forma segura un disco y un archivo usando el comando shred de Linux

Cómo ocultar carpetas y archivos en Linux usando un archivo de texto

Compare dos archivos en Linux:use diff, vimdiff y colordiff