虽然现在各种版本控制工具大行其道,但是有时候还是需要使用相对原始一些的办法提交补丁,制作补丁其实很简单,用 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 一样聪明的程序嘛! 不过有时候还需要加上
-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
这样基本上日常使用就没有什么问题了!