Red de conocimiento informático - Conocimiento informático - Cómo obtener parches a través de diferencias

Cómo obtener parches a través de diferencias

Desde que comencé a usar Git y Linux, me di cuenta de lo útiles que son para mí estas prácticas herramientas en Linux. Por ejemplo, diferencias y parches.

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>

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.