Me gustaría crear un parche de una gccrama 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?

gccoficial establetar.bz2y otra versión inestable del mismo desde ungitrepositorio, me gustaría crear un parche, por supuesto, me gustaría compararlo solo con lamasterrama, no con todo el repositorio.tar.bz2claramente no es ungitrepositorio, ¿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.patchdó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.patchdó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
pindica 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-runsi está satisfecho con el resultado impreso en la pantalla.fuente
dir_updatedcomparación con lo que habíadir_original? ¿Eldiffse encarga de eso también o se salta?file.patchen solo un archivo de texto, para que pueda abrirlo en cualquier editor o simplementecaty verá una línea comoonly in dir_original: missingfile.txtpatchborrará esomissingfile.txto qué más?diff -N ...como en mi primer ejemplo. Normalmentepatcheliminará los archivos vacíos por defecto. Si no quieres, solo úsalodiff -crBcomo en tu pregunta. También en algunos casos (raros) se necesita la-Eopción depatchcomando 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 givendiff -Naru dir/file dir/file.new > diff.patchgetcan't find file to patch at input line 3con lapatch -p0 --dry-run < diff.patchprimera línea de parche lee la--- dir/filesegunda+++ dir/file.newcon marcas de tiempo, la diferencia parece ser la correcta, ¿hay alguna opción para informar los nombres de archivo exactos que busca el comando?