原文地址:http://apps.hi.baidu.com/share/detail/22993397

patch -p0 和patch -p1的区别

在做usb-2.6.12LE06.patch.tar.gz补丁时候出现错误,所以找patch的方法,看到了关于参数的解释,学习了
blog.chinaunix.net/u1/48180/showart_1868730.html
下面是我出现的错误备份一下,//原因是patch的目录不对,应该在kernel同级的drivers/usb/目录下进行的哦
[root@localhost usb]# tar zxvf usb-2.6.12LE06.patch.tar.gz
usb-2.6.12.patch
[root@localhost usb]# ls
usb-2.6.12LE06.patch.tar.gz  usb-2.6.12.patch
[root@localhost usb]# patch -p1 < usb-2.6.12.patch
can't find file to patch at input line 4
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff -ruN usb_old/Makefile usb/Makefile
|--- usb_old/Makefile    2005-06-19 19:09:13.000000000 +0200
|+++ usb/Makefile    2005-11-06 00:44:46.000000000 +0100
--------------------------
File to patch:
Skip this patch? [y] y
Skipping patch.
1 out of 1 hunk ignored
can't find file to patch at input line 15
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff -ruN usb_old/media/Kconfig usb/media/Kconfig
|--- usb_old/media/Kconfig    2005-06-19 17:49:07.000000000 +0200
|+++ usb/media/Kconfig    2005-11-25 21:14:39.000000000 +0100
--------------------------
File to patch:
Skip this patch? [y] y
Skipping patch.
1 out of 1 hunk ignored
can't find file to patch at input line 38
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff -ruN usb_old/media/Makefile usb/media/Makefile
|--- usb_old/media/Makefile    2005-06-19 17:49:07.000000000 +0200
|+++ usb/media/Makefile    2005-11-05 23:05:56.000000000 +0100
--------------------------
File to patch:
Skip this patch? [y] y
Skipping patch.
1 out of 1 hunk ignored
patching file media/spca5xx/cs2102.h
patching file media/spca5xx/hdcs2020.h
patching file media/spca5xx/hv7131b.h
patching file media/spca5xx/hv7131c.h
patching file media/spca5xx/icm105a.h
patching file media/spca5xx/Makefile
patching file media/spca5xx/Makefile.2.4
patching file media/spca5xx/Makefile.org
patching file media/spca5xx/pas106b.h
patching file media/spca5xx/pb0330.h
patching file media/spca5xx/sn9cxxx.h
patching file media/spca5xx/sp5xxfw2.dat
patching file media/spca5xx/sp5xxfw2.h
patching file media/spca5xx/spca5xx.h
patching file media/spca5xx/spcaCompat.h
patching file media/spca5xx/spca_core.c
patching file media/spca5xx/spcadecoder.c
patching file media/spca5xx/spcadecoder.h
patching file media/spca5xx/spcausb.h
patching file media/spca5xx/tas5130c.h
patching file media/spca5xx/zc3xx.h
[root@localhost usb]#

#####################
下面来自无名博客: vcdog.cublog.cn 的具体内容:
今天上QQ的时候发现eva不能用了,后来又看到了解决方法,所以想打个补丁,不过不会:-)。后来查了查明白了,写了个总结,分享一下,也不知道以前有没有这方面的东西,希望我这个不是多余的。

创建补丁文件:

代码:
diff -Naur 旧的目录 新的目录 > patch文件
或者
diff -Naur 旧的文件 新的文件 > patch文件

对于目录层数的一些限制

在创建patch的时候文件夹的层数应当是一样的,比如

代码:
--- old/modules/pcitableMon Sep 27 11:03:56 1999
+++ new/modules/pcitableTue Dec 19 20:05:41 2000

这样是可以的。

代码:
--- old/try1/other/modules/pcitableMon Sep 27 11:03:56 1999
+++ new/modules/pcitableTue Dec 19 20:05:41 2000

这样做可能会有一些问题。

如何使用patch
对于一个patch文件,有两种常用使用方法:
1.

代码:
cat new-patch | patch -p0

2.

代码:
patch -p0 < new-patch

patch命令里面的层数(-p0?-p1?)
参数-p来指定从第几层开始比较。比如有一个patch文件的补丁头是这样的:

代码:
--- old/modules/pcitableMon Sep 27 11:03:56 1999
+++ new/modules/pcitableTue Dec 19 20:05:41 2000

如果使用参数-p0,就表示从当前目录,找一个叫作new的目录,在它下面找一个叫modules的目录,再在它下面找一个叫pcitableMon的目录。
如果使用参数-p1,就表示忽略第一层,从当前目录找一个叫modules的目录,在它下面找一个叫modules的目录。这样会忽略掉补丁头提到的new目录。
依此类推。

patch文件的结构
补丁头
补丁头是分别由---/+++开头的两行,用来表示要打补丁的文件。
一个补丁文件中的多个补丁
一个补丁文件中可能包含以---/+++开头的很多节,每一节用来打一个补丁。所以在一个补丁文件中可以包含好多个补丁。

块是补丁中要修改的地方。它通常由一部分不用修改的东西开始和结束。他们只是用来表示要修改的位置。他们通常以@@开始,结束于另一个块的开始或者一个新的补丁头。
块的缩进
块会缩进一列,而这一列是用来表示这一行是要增加还是要删除的。
块的第一列
+号表示这一行是要加上的。
-号表示这一行是要删除的。
没有加号也没有减号表示这里只是引用的而不需要修改。

一个patch的例子

代码:
diff -u old/modules/pcitable new/modules/pcitable
--- old/modules/pcitableMon Sep 27 11:03:56 1999
+++ new/modules/pcitableTue Dec 19 20:05:41 2000
@@ -1,4 +1,6 @@
0x0e110xae10"cpqarray""Compaq|Smart-2/P RAID Controller"
+0x10000x0010"cpqarray""Compaq|Integrated Array Controller"
+0x10110x0046"cpqarray""Compaq|Smart-2/P RAID Controller"
0x0e110xae32"tlan""Compaq|Netelligent 10/100"
0x0e110xae34"tlan""Compaq|Netelligent 10"
0x0e110xae35"tlan""Compaq|Integrated NetFlex-3/P"
@@ -21,6 +23,7 @@
0x10000x000f"ncr53c8xx""Symbios|53c875"
0x10000x0012"ncr53c8xx""Symbios|53c895a"
0x10000x008f"ncr53c8xx""Symbios|53c875J"
+0x10000x000a"sym53c8xx""Symbios|53c1510"
0x10000x0701"yellowfin""Symbios|83C885 gigabit ethernet"
0x10000x0702"yellowfin""Symbios|Yellowfin G-NIC gigabit ethernet"
0x10110x0001"tulip""DEC|DECchip 21050"
--- old/usr/share/kudzu/pcitableSun Sep 26 17:11:23 1999
+++ new/usr/share/kudzu/pcitableTue Dec 19 20:05:41 2000
@@ -15,6 +15,8 @@
0x0e110x3034"unknown""Compaq|QVision 1280/p"
0x0e110x4000"unknown""Compaq|4000 [Triflex]"
0x0e110xa0f3"ignore""Compaq|Triflex PCI to ISA Bridge"
+0x10000x0010"cpqarray""Compaq|Integrated Array Controller"
+0x10110x0046"cpqarray""Compaq|Smart-2/P RAID Controller"
0x0e110xae10"cpqarray""Compaq|Smart-2/P RAID Controller"
0x0e110xae29"unknown""Compaq|MIS-L"
0x0e110xae2a"unknown""Compaq|MPC"
@@ -46,6 +48,7 @@
0x10000x000f"ncr53c8xx""Symbios|53c875"
0x10000x0012"ncr53c8xx""Symbios|53c895a"
0x10000x008f"ncr53c8xx""Symbios|53c875J"
+0x10000x000a"sym53c8xx""Symbios|53c1510"
0x10000x0701"yellowfin""Symbios|83C885 gigabit ethernet"
0x10000x0702"yellowfin""Symbios|Yellowfin G-NIC gigabit ethernet"
0x10000x0901"unknown""Symbios|61C102"

分析
这个例子是由命令

代码:
diff -u old/modules/pcitable new/modules/pcitable

创建的。不过最好是用命令diff -Naur来代替diff -u。
它修改了两个文件,new/modules/pcitable和new/usr/share/kudzu/pcitable。
第一个补丁头包含两个块,分别增加了两行和一行。

这个是参考了这篇文章http://www.cpqlinux.com/patch.html来总结翻译。由于刚刚接触这些东西,很多地方可能翻译的不恰当,尤其是一些术语,如有发现问题,请给我留言说明,以便我来改正,谢谢。

patch -p0 和patch -p1的区别相关推荐

  1. 打patch p0 p1区别

    如何使用patch 对于一个patch文件,有两种常用使用方法: 1.代码:cat new-patch | patch -p0 2.代码:patch -p0 < new-patch patch命 ...

  2. git 生成多个patch_如何用git命令生成Patch和打Patch

    在程序员的日常开发与合作过程中,对于code的生成patch和打patch(应用patch)成为经常需要做的事情.什么是patch?简单来讲,patch中存储的是你对代码的修改,生成patch就是记录 ...

  3. [git 基础] 生成patch 和 打patch 的实例

    简洁点啊,我看 网上 很多搞得很复杂的介绍, 然后,最关键,他们 这边版本不仅抄来抄去,而且,还是一个英文 谷歌网页翻译版本. 搞得好复杂, 还没讲 清楚. 1生成Patch 直接就是在GUI上,选一 ...

  4. 如何生成Patch及打patch

    如何生成patch: 1. 修改代码 2. git add 添加修改的代码 3. git commit 提交代码 4. git format-patch -1生成Patch 如何打patch: 1. ...

  5. 如何用git命令生成Patch和打Patch(git format-Patch和git am)

    在程序员的日常开发与合作过程中,对于code的生成patch和打patch(应用patch)成为经常需要做的事情. 什么是patch?简单来讲,patch中存储的是你对代码的修改 什么是生成patch ...

  6. git生成patch和打patch

    日常开发与合作过程中,对于code生成patch和打patch(应用patch)成为经常需要做的事情,使用方法(直接给出一些examples): 生成patch git diff > xxx.p ...

  7. Linux合入patch命令,Linux patch命令

    Linux patch命令 Linux patch命令用于修补文件. patch指令让用户利用设置修补文件的方式,修改,更新原始文件.倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行.如果配合 ...

  8. 使用Git生成patch和应用patch

    1. 在git源码目录下执行 git format-patch <old_sha>...<new_sha> -o <patch_dir> 如 git format- ...

  9. git补丁操作:git生成patch和应用patch

    一.生成patch 1.拉取代码仓 git clone xxx代码仓地址 2.在clone到本地的代码目录中,例如对README.md文件进行了修改.然后使用 git status 命令查看工作目录和 ...

最新文章

  1. sybase Invalid command line argument 'and'.
  2. 哈尔滨理工大学软件与微电子学院程序设计竞赛 题解
  3. Windows下Caffe的学习与应用(三)——使用OpenCV3调用自己训练好的Caffe模型进行图像分类
  4. Geospark从Shapefile中加载RDD
  5. mysql 体系结构不匹配_指定的DSN包含驱动程序和应用程序之间的体系结构不匹配...
  6. 刷机提示图像和设备不匹配_安卓5.0升级失败如何解决 安卓5.0刷机失败解决方法介绍【教程】...
  7. [实验流体力学][Matlab] pi 定理的应用
  8. ajax的url怎么将后缀补上_球形门锁怎么拆装?球形门锁安装的方法都包括哪些?
  9. Buses and People CodeForces 160E 三维偏序+线段树
  10. Java程序员可以做哪些副业?
  11. matlab电压灵敏度矩阵,一种基于线性化潮流的配电网灵敏度计算方法与流程
  12. 如何有效管理和快速盘点固定资产?
  13. OC--Foundation框架
  14. php直接读取导入excel文件内容
  15. java 判断文章的重复率_5个避免意外论文重复率高的方法
  16. 【leetcode刷题】 64.数组的度——Java版
  17. Mac系统 PDF转换各种文件格式安装使用教程【PDF Converter Master】
  18. 共建健康网络环境 戮默科技受邀参与制定新《标准》
  19. 江南大学计算机考研学硕报录比,江南大学考研报考录取比例
  20. Day16 Java异常处理

热门文章

  1. 1.1.1.1校园网_还担心断网?快试试清华校园网自动连接程序
  2. Windows 环境下载安装Docker
  3. Spark机器学习MLlib系列1(for python)--数据类型,向量,分布式矩阵,API
  4. 【转】python删除小记
  5. For循环中不可以嵌套RDD操作
  6. Ubuntu 下 使用 adb logcat 显示 Android 日志
  7. Android 5.1 修改系统默认语言
  8. linux驱动中printk的使用注意事项
  9. android的helloworld工程目录学习
  10. WINCE6.0+S3C2443下ADC在电池驱动应用