patch是个什么东西?有什么用呢?
从一个实际的例子说起吧,看一些linux上crond 的源码: http://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/vixie-cron-4.1-72.el5.src.rpm
打开该文件后,会发现里面有很多的patch文件,要想看到完整的cron的源文件,需要自己打这些patch,如果不了解patch命令还不太好办。
首先解压该文件,目录结构大概为:
/
1.patch
2.patch
…
vixie-cron-4.1.tar.gz // 打patch之前的源文件
vixie-cron.spec
首先从vixie-cron.spec中grep出来要打的patch:
grep -i “^patch” vixie-cron.spec |awk ‘{print $2}’ >~/phpor
然后解压vixie-cron-4.1.tar.gz
tar -zxf vixie-cron-4.1.tar.gz
cd vixie-cron-4.1
while read p; do patch -p1 <../$p; done <~/phpor
这样就ok了。
关于patch命令的参考资料:
http://blog.chinaunix.net/uid-9525959-id-2001542.html
patch练习:
1. 创建一个patch文件
diff -uN oldfile newfile>1.patch
2. 打patch
patch <1.patch
给目录打patch
1. diff -uNr olddir newdir>2.patch
2. 打patch
patch <2.patch
diff 参数说明:
-u : 使用统一的输出格式 (默认的格式打patch不太好使)
-N: 对于目录比较来讲,新文件也打进去
-r: 对于目录来讲,递归处理子目录