Al parchar, ¿cuál es la diferencia entre los arguments -p0 y -p1?

¿Cuál es la diferencia entre patch -p0 y patch -p1 ?

¿Hay alguna diferencia en absoluto?

La forma más común de crear un parche es ejecutar el command diff o el command built-in diff -like de algún control de diff . A veces, simplemente estás comparando dos files, y ejecutas diff esta manera:

 diff -u version_by_alice.txt version_by_bob.txt >alice_to_bob.patch 

Luego obtienes un parche que contiene cambios para un file y no contiene ningún nombre de file. Cuando aplica ese parche, debe especificar a qué file desea aplicarlo:

 patch <alice_to_bob.patch version2_by_alice.txt 

A menudo, estás comparando dos versiones de un proyecto completo de varios files contenido en un directory. Una invocación típica de diff ve así:

 diff -ru old_version new_version >some.patch 

Luego, el parche contiene los nombres de los files, indicados en líneas de encabezado como diff -ru old_version/dir/file new_version/dir/file . old_version indicarle al patch que old_version el prefijo ( old_version o new_version ) del nombre del file. Eso es lo que significa " -p1 : quitar un nivel del directory.

A veces, las líneas de encabezado en el parche contienen el nombre del file directamente sin anticipación. Esto es común con los sistemas de control de versiones; por ejemplo, cvs diff produce líneas de encabezado que se ven como diff -r1.42 foo . Entonces no hay prefijo para pelar, por lo que debe especificar -p0 .

En el caso especial cuando no hay subdirectorys en los treees que está comparando, no es necesaria la opción -p : el patch descartará toda la parte del directory de los nombres de los files. Pero la mayoría de las veces, necesita -p0 o -p1 , dependiendo de cómo se produjo el parche.

Del hombre:

-pnum o --strip=num el prefijo más pequeño que contiene las barras diagonales principales de cada nombre de file que se encuentra en el file de parche. Una secuencia de una o más barras adyacentes se count como una barra oblicua. Esto controla cómo se tratan los nombres de file encontrados en el file de parche, en caso de que mantenga sus files en un directory diferente al de la persona que envió el parche. Por ejemplo, suponiendo que el nombre del file en el file de parche fuera:

  /u/howard/src/blurfl/blurfl.c 

la configuration -p0 da el nombre completo del file sin modificar , -p1 da

  u/howard/src/blurfl/blurfl.c 

sin la barra -p4 , -p4 da

  blurfl/blurfl.c 

Lo explicaré a través de ejemplos y terminaré con una nota.

Digamos que tenemos un path con tres barras inclinadas:

 /George/W/Bush 

ejecutar un parche en él con el argumento -p0 tomará la ruta tal como está, sin modificaciones:

 /George/W/Bush 

-p1 eliminará la barra diagonal (tenga en count que ahora es George, sin una barra desde la izquierda):

 George/W/Bush 

-p2 eliminará a George (y barra diagonal adyacente):

  W/Bush 

-p3 eliminará W (y la barra diagonal derecha adyacente):

  Bush