Qual é a diferença entre patch -p0
e patch -p1
?
Existe alguma diferença?
A maneira mais comum de criar um patch é executar o diff
comando ou o comando interno de algum controle de versão diff
. Às vezes, você está apenas comparando dois arquivos e é executado diff
assim:
diff -u version_by_alice.txt version_by_bob.txt >alice_to_bob.patch
Em seguida, você recebe um patch que contém alterações para um arquivo e não contém um nome de arquivo. Ao aplicar esse patch, você precisa especificar em qual arquivo deseja aplicá-lo:
patch <alice_to_bob.patch version2_by_alice.txt
Freqüentemente, você está comparando duas versões de um projeto inteiro com vários arquivos contidos em um diretório. Uma chamada típica de se diff
parece com isso:
diff -ru old_version new_version >some.patch
Em seguida, o patch contém nomes de arquivos, fornecidos em linhas de cabeçalho como diff -ru old_version/dir/file new_version/dir/file
. Você precisa informar patch
para retirar o prefixo ( old_version
ou new_version
) do nome do arquivo. É isso que -p1
significa: retire um nível de diretório.
Às vezes, as linhas de cabeçalho no patch contêm o nome do arquivo diretamente, sem indicações. Isso é comum nos sistemas de controle de versão; por exemplo, cvs diff
produz linhas de cabeçalho que se parecem diff -r1.42 foo
. Como não há prefixo para remover, você deve especificar -p0
.
No caso especial, quando não há subdiretórios nas árvores que você está comparando, nenhuma -p
opção é necessária: patch
descartará toda a parte do diretório dos nomes dos arquivos. Mas na maioria das vezes, você precisa de um -p0
ou -p1
, dependendo de como o patch foi produzido.
diff old/foo new/foo >my.patch
oudiff ../old/foo foo >my.patch
oudiff foo.old foo >my.patch
e o usuário pudesse aplicá-lopatch <my.patch
sem ter que se preocupar com a maneira como o patch foi produzido e, em seguida,-p
foi adicionado como uma conveniência. Mas na verdade eu não sei,patch
é um utilitário antigo e quando comecei a usá-lo-p0
ou-p1
já era a maneira mais comum de usá-lo.Do homem:
fonte
A diferença é que o número depois
-p
especificaria o número de componentes do caminho que seriam removidos.Diga que temos um caminho
/Barack/Obama
. A execução de um patch nele com o-p0
argumento tratará o caminho como está :Mas podemos aparar o caminho durante o patch:
-p1
removerá a barra raiz (observe que agora será apenas Barack, sem uma barra):-p2
removerá Barack (e a barra direita adjacente):Para expandir o "porquê" desse
patch
comportamento, leia este tópico .fonte