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
已经是使用它的最常用方法。