Notes: How to make a patch

August 1, 2008 – 1:20 pm

虽然现在各种版本控制工具大行其道,但是有时候还是需要使用相对原始一些的办法提交补丁,制作补丁其实很简单,用 diff 命令,加上 -u 参数生成带有上下文的 unified 格式的 diff 文件,就是一个 patch 了。可是最容易忘记的地方就是后面的参数是先写未修改过的版本呢还是先写修改过的版本。我自己每次都记不住,要去查 man page 。正好今天收到一个 patch ,发现里面的修改都是反过来的,大概也是参数写反了吧。 ^_^ 所以我终于决定把正确的用法记下来:

diff -u original new > original.patch

希望自己能记住,就算记不住也能方便地在此查到。 :)

Update 2008-08-02: 应用 patch 的方法,很简单,只要

patch < original.patch

就可以了,因为 patch 是 Larry Wall 写的如同 Perl 一样聪明的程序嘛! :D 不过有时候还需要加上 -p 参数,例如,patch 是这样的:

--- foo/bar.c   2008-08-02 08:19:03.000000000 -0400
+++ foo_new/bar.c       2008-08-02 08:19:22.000000000 -0400
@@ -2,6 +2,6 @@
 
 int main(int argc, char *argv[])
 {
-       printf("hello world\n");
+       printf("Hello world!\n");
        return 0;
 }

生成 patch 的时候是在上一层目录生成的,因此需要用 -p1 略过一层目录:

patch -p1 < ../bar.patch

这样基本上日常使用就没有什么问题了!

  1. 4 Responses to “Notes: How to make a patch”

  2. 写反过来的patch有办法恢复吗?

    顺便把应用patch的方法也写在这里吧,总是记不住…

    By quark on Aug 1, 2008

  3. @quark,
    不知道,也许把行首的加号和减号换过来就好了?

    By pluskid on Aug 2, 2008

  4. `-R, –reverse` 参数可以用来反向应用 patch。

    By jjgod on Aug 4, 2008

  5. @jjgod,
    恩,这个不错!多谢! :D

    By pluskid on Aug 4, 2008

Post a Comment