¿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 diff
comando o el comando incorporado de algún control de versión diff
. A veces, solo estás comparando dos archivos, y corres diff
así:
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 diff
ve 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 patch
que elimine el prefijo ( old_version
o new_version
) del nombre del archivo. Eso es lo que -p1
significa: 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 diff
produce 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 -p
es necesaria ninguna opción: patch
descartará toda la parte del directorio de los nombres de archivo. Pero la mayoría de las veces, necesita uno -p0
o -p1
, dependiendo de cómo se produjo el parche.
diff old/foo new/foo >my.patch
odiff ../old/foo foo >my.patch
odiff foo.old foo >my.patch
y el usuario podía aplicarlopatch <my.patch
sin tener que preocuparse por cómo se produjo el parche, y luego-p
se agregó como una conveniencia. Pero en realidad no sé,patch
es una utilidad antigua y para cuando comencé a usarla-p0
o-p1
ya eran las formas más comunes de usarla.Del hombre:
fuente
La diferencia es que el número posterior
-p
especificaría el número de componentes de ruta que se eliminarían.Digamos que tenemos un camino
/Barack/Obama
. Ejecutar un parche con el-p0
argumento tratará la ruta como es :Pero podemos recortar el camino mientras parcheamos:
-p1
eliminará la barra diagonal (tenga en cuenta que ahora será Barack, sin una barra):-p2
eliminará Barack (y la barra diagonal derecha adyacente):Para ampliar el "por qué" de este
patch
comportamiento, lea este hilo .fuente