¿Por qué está aquí "-p1" para "parchear"?

¿Por qué está aquí "-p1" para "parchear"?

Para revertir los cambios a un archivo en una confirmación, desdehttps://stackoverflow.com/a/2620822/156458

#!/bin/bash

function output_help {
    echo "usage: git-revert-single-file <sha1> <file>"
}

sha1=$1
file=$2

if [[ $sha1 ]]; then
git diff $sha1..$sha1^ -- $file | patch -p1
else
output_help
fi

¿ Por qué está -p1enpatch

git diff $sha1..$sha1^ -- $file | patch -p1

Gracias.

Respuesta1

Porque git diffagrega directorios falsos ay ba sus parches, que deben omitirse patch(de ahí el -p1). githace esto para representar información que no está en el sistema de archivos (los archivos que se comparan no existen simultáneamente); Por ejemplo

diff --git a/README b/README
index ce01362..a1e6cf9 100644
--- a/README
+++ b/README
@@ -1 +1,2 @@
 hello
+Tim

para un archivo README en el directorio actual. diffproduciría

--- README.orig 2017-04-07 20:39:50.843962430 +0200
+++ README      2017-04-07 20:39:56.284108455 +0200
@@ -1 +1,2 @@
 hello
+Tim

(suponiendo que hayamos guardado una copia del original en otro lugar); tenga en cuenta la ausencia de directorios aquí (ya que los archivos están en el directorio actual).

El último parche se aplica tal cual con patch; el primero necesita eliminar el primer elemento de cada ruta, de ahí el -p1.

información relacionada