Red de conocimiento informático - Material del sitio web - Cómo usar git-am para fusionar git format-patch para generar parches de respaldo de git

Cómo usar git-am para fusionar git format-patch para generar parches de respaldo de git

Comparar diff y format-patch:

Compatibilidad: Obviamente, los parches generados por git diff son más compatibles. Si el repositorio oficial del código que desea modificar no es un repositorio administrado por Git, entonces debe usar un parche generado por git diff para que el mantenedor del proyecto pueda aceptar su código.

Depuración: para los parches generados por git diff, puede usar git apply --check

para ver si el parche se aplica limpiamente a la rama actual si es generado por git; format-patch El parche generado no se aplica a la rama actual, git

am le avisará y le proporcionará ayuda. También puedes usar git am

-3 para realizar una combinación de tres vías, que se describe en el manual de git o Progit. Desde este punto de vista, ambos son muy poderosos a la hora de depurar.

Información del repositorio: dado que el parche generado por git format-patch contiene el nombre del desarrollador del parche, obviamente es apropiado que este nombre se registre en el repositorio cuando se aplique el parche. Por lo tanto, la comunidad de código abierto que actualmente usa Git tiende a recomendar que las personas usen format-patch para generar parches.

A continuación se describe cómo utilizar git-am y format-patch.

Muchas veces las personas (proveedores u otros desarrolladores) envían una serie de parches, a menudo con nombres como este:

0001--JFFS2-community-fix-with-not -use-OOB.patch

0005--1-arm-add-more-cache-memory-types-macr.patch

0006--2-Port-imx- 3.3 .0-release-to-2.6.28.patch

0007--3-Add-MX25-support.patch

0008--Move-asm-arch-headers-to -linux-inc-dir.patch

0009--1-regulator-allow-search-by-regulator.patch

Contiene registro de confirmación, autor, fecha y otra información. Todo lo que tienes que hacer es introducir estos parches en tu base de código, preferiblemente con registros incluidos para mantenimiento futuro. El método tradicional de parcheo es

patch -p1 lt;0001--JFFS2-community-fix-with-not-use-OOB.patch

, pero este método perderá utilidad. información.

Dado que estos parches aparentemente se generaron usando git format-patch, usar las herramientas de git debería ser suficiente.

git-am hace precisamente eso.

Antes de usar git-am, primero debes usar git am -abort una vez para descartar la información am anterior y poder realizar am nuevamente.

De lo contrario, verás este error.

.git/rebase-apply

Aún existe, pero se proporciona mbox.

git-am puede fusionar un archivo a la vez, fusionar todos los parches en un directorio o fusionar parches en un directorio de buzón.

Aquí hay dos ejemplos:

Ahora tienes una base de código: small-src y tu archivo de parche está en ~/patch/0001-trival-patch.patch

cd small-src

git-am ~/patch/0001-trival-patch

Si el parche tiene éxito, puedes ir a tomar una taza de té. .

Si falla, git mostrará un mensaje de error, por ejemplo:

error: parche fallido: android/mediascanner.cpp: 452

error: android / mediascanner.cpp: el parche no se aplica

En este momento, debe verificar el parche y luego modificar el archivo incorrecto para que se pueda aplicar el parche.

Tienes un montón de parches con nombres como el que mencionaste anteriormente y los colocas en ~/patch-set/

cd opencore

git am ~/patch-set/*.patch

(Aquí git colocará estos parches uno por uno en orden. Los parches están organizados en el orden de los nombres de los archivos)

Si todo va Bueno, todos los parches están bien, tienes suerte otra vez.

Pero nueve de cada diez veces, cuando las cosas van mal, si git am encuentra un parche, se detendrá donde encuentre el

parche y le dirá qué parche no es correcto. .

Por ejemplo, ahora tengo un archivo con dos parches.

El contenido del archivo es

Texto

Más texto

Los dos parches son:

0001 - add-line.patch:

De 48869ccbced494e05738090afa5a54f2a261df0f lunes 17 de septiembre a las 00:00:00 2001

De: zhangjiejing lt;zhangjiejing@zhangjiejing-desktop.(none)gt;

Fecha: jueves, 22 de abril de 2010 13:04:34 0800

Asunto: [PATCH 1/2] agregar línea

---

archivo 2

1 archivos cambiados, 2 inserciones( ), 0 eliminaciones(-)

diff --git a/file b/file

índice 067780e..685f0fa 100644

--- a/archivo

b/archivo

@@ -3, 3 3, 5 @@ archivo:< / p>

algo de texto

más texto

añadir línea

--

1.6 3.3

0002-change-line.patch:

De f756e1b3a87c216b7e0afea9d15badd033171578 lunes 17 de septiembre a las 00:00:00 2001

De: zhangjiejing lt; - escritorio.(none)gt;

Fecha: jueves, 22 de abril de 2010 13:05:19 0800

Asunto: [PATCH 2/2] cambiar línea

---

archivo 2 -

1 archivos modificados, 1 inserciones(), 1 eliminaciones(-)

diff --git a/ archivo b/archivo

índice 685f0fa...7af7852 100644

--- a/archivo

b/archivo

@@ - 1, 6 1, 6 @@

archivo:

-algo de texto

Cambiar texto de línea

más texto

--

1.6.3.3

Ejecutar

git am *.patch

Fusiona los parches y reporta un Error: El parche falló en 0001 agregar línea. Entonces echamos un vistazo a este

parche y resulta que el parche requiere algo de texto y el texto en el archivo es texto, por lo que usamos el editor para cambiar esto. línea a algún texto,

vi file

git apply 0001-add-line.patch

git add file

git am - -resuelto

Después de resolver el conflicto, puedes usar git add para informarle a git que has resuelto el conflicto.

Si se descubre que el conflicto no se ha resuelto, se puede deshacer toda la operación am.

Utilice git format-patch para generar el parche requerido:

# git format-patch -s 1bbe3c8c197a35f79bfddaba099270a2e54ea9c7

Reemplace el código hash con la última confirmación en su repositorio.

Luego podrás encontrar el parche en el directorio del repositorio.

Envía tu parche al administrador de configuración.

Reemplace el código hash con la última confirmación de su repositorio.