修补时参数 -p0 和 -p1 有什么区别?

修补时参数 -p0 和 -p1 有什么区别?

patch -p0和 和有什么区别patch -p1

有什么区别吗?

答案1

创建补丁的最常见方法是运行diff命令或某些版本控制的内置diff类似命令。有时,您只是比较两个文件,然后diff像这样运行:

diff -u version_by_alice.txt version_by_bob.txt >alice_to_bob.patch

然后,您将获得一个补丁,其中包含对一个文件的更改,但根本不包含文件名。当您应用该补丁时,您需要指定要将其应用到哪个文件:

patch <alice_to_bob.patch version2_by_alice.txt

通常,您会比较目录中包含的整个多文件项目的两个版本。典型的调用diff如下所示:

diff -ru old_version new_version >some.patch

然后补丁包含文件名,在标题行中给出,例如diff -ru old_version/dir/file new_version/dir/file.您需要告诉从文件名中patch删除前缀(old_version或)。new_version这就是-p1意思:剥离一级目录。

有时,补丁中的标题行直接包含文件名,没有任何引导。这在版本控制系统中很常见;例如cvs diff生成看起来像的标题行diff -r1.42 foo。那么就没有要 strip 的前缀,所以必须指定-p0.

在特殊情况下,当您要比较的树中没有子目录时,-p不需要任何选项:patch将丢弃文件名的所有目录部分。但大多数时候,您确实需要 或-p0-p1具体取决于补丁的生成方式。

答案2

来自男人:

-pnum 或者 --strip=num 从补丁文件中找到的每个文件名中去除包含 num 个前导斜杠的最小前缀。一个或多个相邻斜杠的序列被视为单个斜杠。这控制如何处理补丁文件中找到的文件名,以防您将文件保存在与发送补丁的人不同的目录中。 例如,假设补丁文件中的文件名是:

 /u/howard/src/blurfl/blurfl.c

设置-p0给出未修改的整个文件名,-p1给出

 u/howard/src/blurfl/blurfl.c

没有前导斜杠-p4给出

 blurfl/blurfl.c

答案3

不同之处在于,后面的数字-p指定要删除的路径组件的数量。

假设我们有一条路/Barack/Obama。使用参数对其执行补丁-p0将处理该路径按原样:

/Barack/Obama

但我们可以在修补时修剪路径:

-p1将删除根斜线(请注意,现在只是 Barack,没有斜线):

Barack/Obama

-p2将删除巴拉克(和相邻的右斜杠):

 Obama

要详细了解此行为的“原因” patch,请阅读这个线程

相关内容