Me gustaría crear un parche de una gcc
rama específica comparándolo con los lanzamientos oficiales; así que cuando desempaquete el tarball de la versión estable, puedo aplicar el parche y obtener el equivalente de lo que estaba en esa rama específica.
Es la primera vez que necesito crear un parche, así que es la primera vez que hago esto y mi principal preocupación es obtener las opciones y el análisis correctos ya que estamos hablando de un software extremadamente importante.
diff -crB GccStable GccGit > /tmp/fromStabletoBranch.patch
¿Es esto suficiente y la mejor manera de hacerlo?
gcc
oficial establetar.bz2
y otra versión inestable del mismo desde ungit
repositorio, me gustaría crear un parche, por supuesto, me gustaría compararlo solo con lamaster
rama, no con todo el repositorio.tar.bz2
claramente no es ungit
repositorio, ¿cómo crees que debo proceder?Respuestas:
Sí, esta es una buena manera de crear un parche.
En breve:
Para crear un parche para un solo archivo, su comando puede verse como
diff -Naru file_original file_updated > file.patch
dónde
-N
: trata los archivos ausentes como vacíos-a
: trata todos los archivos como texto-r
: compara recursivamente cualquier subdirectorio encontrado-u
: salida NUM (por defecto 3) líneas de contexto unificadoPara crear un parche para todo el directorio:
diff -crB dir_original dir_updated > dfile.patch
dónde
-c
: salida NUM (por defecto 3) líneas de contexto copiado-r
: compara recursivamente cualquier subdirectorio-B
: ignora los cambios cuyas líneas están en blancoDespués de todo para aplicar este parche, uno puede ejecutar
donde switch le
p
indica al parche que elimine el prefijo de ruta para que los archivos se identifiquen correctamente. En la mayoría de los casos debería ser1
.Elimine
--dry-run
si está satisfecho con el resultado impreso en la pantalla.fuente
dir_updated
comparación con lo que habíadir_original
? ¿Eldiff
se encarga de eso también o se salta?file.patch
en solo un archivo de texto, para que pueda abrirlo en cualquier editor o simplementecat
y verá una línea comoonly in dir_original: missingfile.txt
patch
borrará esomissingfile.txt
o qué más?diff -N ...
como en mi primer ejemplo. Normalmentepatch
eliminará los archivos vacíos por defecto. Si no quieres, solo úsalodiff -crB
como en tu pregunta. También en algunos casos (raros) se necesita la-E
opción depatch
comando para eliminar archivos vacíos, después del manual del parche:if the input is not a context diff or if patch is conforming to POSIX, patch does not remove empty patched files unless this option is given
diff -Naru dir/file dir/file.new > diff.patch
getcan't find file to patch at input line 3
con lapatch -p0 --dry-run < diff.patch
primera línea de parche lee la--- dir/file
segunda+++ dir/file.new
con marcas de tiempo, la diferencia parece ser la correcta, ¿hay alguna opción para informar los nombres de archivo exactos que busca el comando?