Por que é '-p1' para 'patch' aqui?

0

Para reverter as alterações em um arquivo em um commit, do link

#!/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 que -p1 to patch em

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

Obrigado.

    
por Tim 07.04.2017 / 18:44

1 resposta

3

Porque git diff adiciona diretórios falsos a e b aos seus patches, que precisam ser ignorados por patch (daí o -p1 ). git faz isso para representar informações que não estão no sistema de arquivos (os arquivos comparados não existem simultaneamente); por exemplo

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

para um arquivo README no diretório atual. diff produziria

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

(supondo que tenhamos mantido uma cópia do original em outro lugar); observe a ausência de diretórios aqui (já que os arquivos estão no diretório atual).

O último patch é aplicado como está com patch ; o primeiro precisa ter o primeiro elemento de cada caminho removido, portanto, o -p1 .

    
por 07.04.2017 / 18:46

Tags