¿Cuál es la diferencia entre patch -p0y patch -p1?
¿Hay alguna diferencia en absoluto?
La forma más común de crear un parche es ejecutar el diffcomando o el comando incorporado de algún control de versión diff. A veces, solo estás comparando dos archivos, y corres diffasí:
diff -u version_by_alice.txt version_by_bob.txt >alice_to_bob.patch
Luego obtienes un parche que contiene cambios para un archivo y no contiene ningún nombre de archivo. Cuando aplique ese parche, debe especificar a qué archivo desea aplicarlo:
patch <alice_to_bob.patch version2_by_alice.txt
A menudo, está comparando dos versiones de un proyecto completo de varios archivos contenido en un directorio. Una invocación típica de se diffve así:
diff -ru old_version new_version >some.patch
Luego, el parche contiene nombres de archivo, dados en líneas de encabezado como diff -ru old_version/dir/file new_version/dir/file. Debe indicar patchque elimine el prefijo ( old_versiono new_version) del nombre del archivo. Eso es lo que -p1significa: eliminar un nivel de directorio.
A veces, las líneas de encabezado en el parche contienen el nombre del archivo directamente sin ningún encabezado. Esto es común con los sistemas de control de versiones; por ejemplo cvs diffproduce líneas de encabezado que se parecen diff -r1.42 foo. Entonces no hay prefijo para eliminar, por lo que debe especificar -p0.
En el caso especial cuando no hay subdirectorios en los árboles que está comparando, no -pes necesaria ninguna opción: patchdescartará toda la parte del directorio de los nombres de archivo. Pero la mayoría de las veces, necesita uno -p0o -p1, dependiendo de cómo se produjo el parche.
diff old/foo new/foo >my.patchodiff ../old/foo foo >my.patchodiff foo.old foo >my.patchy el usuario podía aplicarlopatch <my.patchsin tener que preocuparse por cómo se produjo el parche, y luego-pse agregó como una conveniencia. Pero en realidad no sé,patches una utilidad antigua y para cuando comencé a usarla-p0o-p1ya eran las formas más comunes de usarla.Del hombre:
fuente
La diferencia es que el número posterior
-pespecificaría el número de componentes de ruta que se eliminarían.Digamos que tenemos un camino
/Barack/Obama. Ejecutar un parche con el-p0argumento tratará la ruta como es :Pero podemos recortar el camino mientras parcheamos:
-p1eliminará la barra diagonal (tenga en cuenta que ahora será Barack, sin una barra):-p2eliminará Barack (y la barra diagonal derecha adyacente):Para ampliar el "por qué" de este
patchcomportamiento, lea este hilo .fuente