Answers:
创建补丁程序的最常见方法是运行diff命令或某些版本控制的内置diff-like命令。有时,您只是比较两个文件,并且运行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。然后没有要删除的前缀,因此必须指定-p0。
在特殊情况下,要比较的树中没有子目录时,则不需要任何-p选项:patch将丢弃文件名的所有目录部分。但是大多数时候,您确实需要-p0或-p1,具体取决于补丁的产生方式。
diff old/foo new/foo >my.patch或diff ../old/foo foo >my.patch或diff foo.old foo >my.patch,并且用户可以应用它patch <my.patch而不必关心补丁的产生方式,然后-p添加它是为了方便。但是我实际上并不知道它patch是一个旧的实用程序,并且在我开始使用它时-p0或者-p1已经是使用它的最常用方法。