Eu entendo que patch
permite aplicar patches em aplicativos quando alguns componentes do caminho são removidos.
Enquanto -p0
o argumento tratará um caminho como está :
/var/www/html/example.com
-p1
irá remover a barra raiz, então o caminho com o qual trabalhamos se torna:
var/www/html/example.com
Por que alguém iria querer remover a barra raiz (ou qualquer componente anterior de um caminho) e não apenas corrigir com um caminho completo?
Consigo ver uma lógica de aprofundamento em uma árvore de diretórios por um caminho relativo, mas sinto falta se será prático ou útil na grande maioria dos casos.
O
patch
utilitário é um utilitário POSIX e a seção Rationale na especificação padrão do utilitário fornece um exemplo do uso da-p
opção:O manual do OpenBSD também tem um exemplo semelhante, mas um pouco expandido, de quando o uso
-p
pode ser útil (grifo meu):Segue dizendo:
Ou seja, se você receber um patch com caminhos absolutos para os arquivos aos quais ele se aplica e mantiver esses arquivos em um diretório diferente, poderá usar
-p
o número apropriado para "deslocar" os caminhos no patch do diretório especificado por-d
(ou o diretório atual).O comando patch lê as instruções de um arquivo de origem sobre como alterar um arquivo e, em seguida, aplica as alterações (para obter mais detalhes ). E passando o sinalizador -pN pula N barras iniciais dos nomes de arquivos presentes no arquivo de correção.
É sobre uma parte do diretório no cabeçalho diff . No seu caso, o cabeçalho diff contém esta string:
/var/www/html/example.com
. Se você usar o sinalizador -p1, o utilitário patch será removido desse diretório principal da string e você obterá umvar/www/html/example.com
, que você deseja corrigir. Com o parâmetro -p0, o patch não tira nada dessa string e não funcionará corretamente.Por exemplo:
Para correção de invocação adequada do arquivo SSH2.xs (arquivo de correção localizado aqui: rt.cpan.org/Public/Bug/Display.html?id=36614 ):
patch contém um diretório
Net-SSH-0.18.orig
que você removeu antes do patch e acima deve ser executado a partir do diretório onde o arquivo SSH2.x2 está lá.Referência:
1. -p0 vs -p1
2. Man page -
IBM