Cómo usar git-am para fusionar git format-patch para generar parches de respaldo de git
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; p >
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.