Cómo obtener parches a través de diferencias
Si realizas una modificación en el código fuente abierto, normalmente necesitarás crear un parche para compartirlo (por ejemplo, registrar un error) o conservarlo para tu propio uso. Al instalar software de código fuente, es inevitable aplicar algunos parches creados por otros. Este artículo presentará cómo crear y aplicar parches.
Introducción a las Diferencias
Las diferencias te permiten comparar dos cosas y registrar las diferencias entre ellas al mismo tiempo. El uso general y las opciones comunes al realizar parches son las siguientes:
opción diff archivo fuente (carpeta) archivo destino (carpeta)
-r
Recursivo. Cuando se establece, diff compara todos los archivos correspondientes, incluidos los archivos de subdirectorio, en dos versiones diferentes de los directorios de origen. La opción
-N
-N
garantiza que el archivo de parche maneje correctamente la creación o eliminación de archivos.
-u
Muestra 3 líneas antes y después de cada modificación. También puedes usar -u5 para especificar que se genere más contexto.
-E, -b, -w, -B, -strip-trailing-cr
Ignora varios espacios en blanco, consulta la documentación para conocer las opciones requeridas.
Introducción a los parches
Por otro lado, los parches se utilizan para aplicar los resultados de registros diferenciales (es decir, parches) a los archivos (carpetas) correspondientes. El uso más común es:
patch -pNUM lt;patchfilegt;
-p Num
Ignora varias capas de carpetas, como se explica más adelante.
-E
Opción Descripción Si se encuentra un archivo vacío, elimínelo
-R
Desparche el archivo.
Para obtener una explicación del parámetro -p, consulte el siguiente fragmento del archivo de parche:
-- old/modules/pcitable Mon Sep 27 11:03:56 1999
nuevo/modules/pcitable martes 19 de diciembre 20:05:41 2000
Si usa el parámetro -p0, buscará la carpeta denominada antigua en el directorio actual y luego buscará módulos /pcitable debajo de él para realizar operaciones de parche.
Si usa el parámetro -p1, significa ignorar el directorio de primer nivel (es decir, independientemente del directorio anterior), buscar la carpeta denominada módulos en el directorio actual y luego buscar el archivo pcitable debajo de él.
Aplicación sencilla
Utilice el comando anterior para procesar un parche de un solo archivo:
# Generar parche
diff -uN from-file to-file gt; to-file.patch
# parche
patch -p0 gt; to-file.patch
# despatch
parche -RE -p0 gt;to-file.patch
# Generación de parche
2222222
111111
-1111111
2222222
111111
Al aplicar el parche, solo use:
$ parche -p0gt;test1.patchpatching archivo test0
En este momento test0 es lo mismo que test1.
Para deshacer los cambios realizados por el parche y volver a la versión anterior:
$ parche -RE -p0gt;test1.patchpatching archivo test0
Ejemplo de carpeta análisis
Tiene el siguiente entorno:
--prj0
test0
prj0name
--prj1/
test1
prj1name
prj0/prj0name tiene las siguientes tres líneas:
--------
prj0/prj0name
--------
prj1/prj1name contiene las siguientes tres líneas:
----- ---
prj1/prj1name
--------
Utiliza diff -uNr para crear un parche,
diff -uNr prj0 prj1 gt; prj1.patch
El archivo de parche obtenido es:
diff -uNr prj0/prj0name prj1/prj0name
--- prj0/prj0name 2006-08 -18 09:25:11.000000000 0800
prj1/prj0name 1970-01-01 08:00:00.000000000 0800
@@ -1, 3 0, 0 @@
---------
-prj0/prj0name
------- --
diff -uNr prj0/prj1name prj1/prj1name
--- prj0/prj1name 1970-01-01 08:00:00.000000000 0800
prj1/prj1name 2006-08- 18 09:26:36.000000000 0800
@@ -0, 0 1, 3 @@
---------
prj1/ prj1name
---------
diff -uNr prj0/test0 prj1/ test0
--- prj0/test0 2006-08- 18 09:23:53.000000000 0800
prj1/test0 1970-01-01 08:00:00.000000000 0800
@@ -1, 3 0, 0 @@
-111111
-111111
-111111
diff -uNr prj0/test1 prj1/test1
--- prj0 /test1 1970-01- 01 08:00:00.000000000 0800
prj1/test1 2006-08-18 09:26:00.000000000 0800
@@ -0, 0 1, 4 @@
222222
111111
222222
111111
222222
111111
Aplicar este parche:
$ ls
prj0 prj1 prj1.patch
$ cd prj0
$ patch -p1 gt ./ prj1.patch
Archivo de parche prj0name
Archivo de parche prj1name
Archivo de parche test0
Archivo de parche test1
Del mismo modo, para revertir una operación de parche:
$ patch -R -p1 gt .../prj1.patch
archivo de parche prj0name
archivo de parche; prj1name
archivo de parche test0
archivo de parche test1
$ ls
prj0name test0
En Windows p> p>
En Windows, probé muchos programas, incluido gnuwin, y algunas herramientas implementadas u organizadas por los propios geeks. El resultado es que estos programas no funcionan en absoluto. Puedes usar diff para generar parches, pero tú. no se puede parchar. Más tarde, también busqué WIN en SF y descubrí que la mejor solución para WIN es TortoiseMerge en TortoiseSVN, seguido de la cadena de herramientas en msysgit. Además, netBeans también puede generar parches y luego aplicarlos utilizando herramientas de parches.