Articulo de referencia

parche (Unix)

patch es un comando de shell que actualiza archivos de texto según las instrucciones de un archivo separado, llamado archivo de parche . El archivo de parche es un archivo de te...

patches un comando de shell que actualiza archivos de texto según las instrucciones de un archivo separado, llamado archivo de parche . El archivo de parche es un archivo de texto que enumera las diferencias entre el archivo de entrada y el contenido deseado. El comando está diseñado para admitir archivos de parche creados mediante . Un usuario crea un archivo de parche ejecutando para dos versiones de un archivo (original y objetivo), lo que produce una lista de diferencias que luego se puede usar para generar el archivo objetivo a partir del archivo original más el archivo de parche. El término parche también es un verbo para aplicar un parche.diffdiffpatch

Desarrollado por un programador para otros programadores, patchse utilizaba frecuentemente para actualizar el código fuente a una versión más reciente. Por ello, muchas personas asociaron los parches con el código fuente, cuando en realidad pueden aplicarse a cualquier texto. Los archivos parcheados no acumulan texto innecesario, como algunos creen basándose en el significado literal de la palabra; un parche sirve tanto para eliminar como para añadir texto.

Los parches que se describen aquí no deben confundirse con los parches binarios , que, aunque pueden ser conceptualmente similares, se distribuyen para actualizar los archivos binarios que componen el programa a una nueva versión.

patchEl programa original fue escrito por Larry Wall (quien luego creó el lenguaje de programación Perl ) y publicado en [ 1 ] (que más tarde se convirtió en ) en mayo de 1985. se agregó a XPG4, que más tarde se convirtió en POSIX . [ 2 ] El código de Wall sigue siendo la base de los programas "patch" proporcionados en OpenBSD , [ 3 ] FreeBSD , [ 4 ] y schilytools. [ 5 ] Se dice que The Open Software Foundation , que se fusionó con The Open Group , mantuvo una versión derivada. El proyecto GNU / FSF mantiene su parche, bifurcado de la versión de Larry Wall. El repositorio es diferente al de GNU diffutils, pero la documentación se gestiona conjuntamente. [ 6 ] Originalmente escrito para Unix, el comando también se ha portado a Windows (a través de GnuWin32 y UnxUtils ) y a muchas otras plataformas. Una implementación forma parte de las herramientas MSX-DOS2 de ASCII para MSX-DOS versión 2. [ 7 ]mod.sourcescomp.sources.unixpatch

Usar

Dado que los archivos de parche son texto, se pueden utilizar en procesos como la revisión de calidad y la modificación mediante un editor de texto.

Además del diffcomando, se puede generar un archivo de parche mediante otros programas, como Subversion , CVS , RCS , Mercurial y Git .

Los parches han sido un componente crucial de muchos sistemas de control de versiones , incluido CVS .

Diferenciales avanzados

Cuando se utilizan diferencias más avanzadas, los parches se pueden aplicar incluso a archivos que se hayan modificado mientras tanto, siempre que dichas modificaciones no interfieran con el parche. Esto se logra mediante el uso de " diferencias de contexto " y " diferencias unificadas " (también conocidas como "unidiffs"), que rodean cada cambio con un contexto , que es el texto inmediatamente anterior y posterior a la parte modificada. Patch puede entonces usar este contexto para localizar la región que se va a parchear, incluso si ha sido desplazada por cambios anteriores en el archivo, usando los números de línea en las diferencias como punto de partida. Debido a esta propiedad, las diferencias de contexto y unificadas son el formato preferido de parches para su envío a muchos proyectos de software.

Las características mencionadas hacen que las herramientas diff y patch sean especialmente populares para intercambiar modificaciones de software de código abierto . Los usuarios externos pueden descargar el código fuente más reciente disponible públicamente, modificarlo y enviarlo, en formato diff, al equipo de desarrollo. Mediante diff, el equipo de desarrollo puede revisar eficazmente los parches antes de aplicarlos y aplicarlos a una base de código más reciente que la que tenía acceso el desarrollador externo.

Ejemplos

El siguiente comando crea un archivo de parche, patchFile, que codifica cómo generar a newFilepartir de oldFile. La -uopción selecciona la salida en formato diff unificado.

$ diff -u oldFile newFile > patchFile 

El siguiente comando aplica los cambios al archivo identificado en patchFile.

$ patch < archivo de parche 

Para aplicar un parche a un archivo en un subdirectorio se requiere la opción adicional, donde el número es 1 si el directorio base del árbol de origen está incluido en la diferencia, y 0 en caso contrario.-pnumber

Un parche se puede deshacer o revertir con la -Ropción:

$ patch -R < archivo de parche 

Si el archivo utilizado como original es significativamente diferente del archivo original real, el parche no se puede aplicar correctamente. Por ejemplo, si se insertan líneas de texto al principio, los números de línea a los que se hace referencia en el parche serán incorrectos. patches capaz de recuperarse de esto examinando las líneas cercanas para reubicar el texto que se va a parchear. También se recuperará cuando se alteren las líneas de contexto (para diferencias de contexto y unificadas); esto se describe como fuzz .

Véase también

Referencias

  1. Wall, Larry (8 de mayo de 1985). "Versión del parche 1.3" . Grupo de noticias : mod.sources . Archivado del original el 4 de abril de 2023. Consultado el 14 de julio de 2024 . 
  2. Shell and Utilities Reference, The Single UNIX Specification , Versión 5 de The Open Grouppatch  
  3. http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/patch/ Archivado el 7 de junio de 2017 en la Wayback Machine (fuente de parches de OpenBSD)
  4. Shell and Utilities Reference, The Single UNIX Specification , Versión 5 de The Open GroupFreeBSD  
  5. "Schilytools" . Archivado del original el 8 de mayo de 2023. Consultado el 8 de mayo de 2023 .
  6. "Patch.c\SRC - patch.git - Parche GNU" . Archivado del original el 8 de mayo de 2023. Consultado el 8 de mayo de 2023 .
  7. Manual de usuario de MSX-DOS2 Tools de ASCII Corporation
  • GNU Diffutils (incluye diff y patch); Documentación
  • Herramientas GNU para Win32 : versión para Win32 de las herramientas, incluyendo diff y patch. 
  • Dickey, Thomas E. "DIFFSTAT – crea un histograma a partir de la salida de diff" . Archivado del original el 22 de enero de 2020. Consultado el 1 de mayo de 2020 .