转:Patch打补丁学习笔记

Patch打补丁学习笔记

1.基本命令语法:
  patch [-R] {-p(n)} [–dry-run] < patch_file_name
  p:为path的缩写。
  n:指将patch文件中的path第n条’/’及其左边部分取消。
  -R:卸载patch包。
  –dry-run:尝试patch软件,并不真正修改软件。

  例如:

   p a t c h p 1 < / h o m e / s e n s e / p a t c h 2.6.19.1 patch -p1 -R < /home/sense/patch-2.6.19.1 卸载补丁

  例如:
  0002-main.patch main.c
  diff –git a/src/core/main.c b/src/core/main.c

  如果这两个文件在同目录下,那么就要省略三层目录(目录路径中有三个”/”),因此打补丁命令为:
  $ patch -p3 < 0002-main.patch

2.假如发现某个项目有bug代码,而自己又没有svn的提交权限,那么此时最合适的解决方法就是用diff命令做一个补丁发给项目成员。项目成员通过patch命令可以立刻知道你的意图。

3.实验

  $ diff -Naur old new > foo.patch
  其中-Naur参数属于固定打法,不管是对一个文件,还是对一个目录,在使用这个参数基本就可以了。

   p a t c h p 0 < f o o . p a t c h patch -p1 < ../foo.patch )

  如果再次使用会提示是否还原,输入y就还原。

  如果你想严格指定是应用补丁可以使用下面命令(就是增加N参数):

  # patch -Np0 < foo.patch

  如果你想严格指定是还原补丁可以使用下面命令(就是增加R参数):

  # patch -Rp0 < foo.patch

4.总结

  单个文件
  diff –uN from-file to-file >to-file.patch 制作补丁
  patch –p0 < to-file.patch 打补丁
  patch –RE –p0 < to-file.patch 还原

  多个文件
  diff –uNr from-docu to-docu >to-docu.patch
  patch –p1 < to-docu.patch
  patch –R –p1

二、使用git打补丁

1.检测补丁有无问题
g i t a p p l y c h e c k x x x . p a t c h 2. e r r o r : x x x x x : p a t c h d o e s n o t a p p l y ( 使 r e j e c t ) . r e j 3. w a r n i n g : x x x x . c h a s t y p e 100644 , e x p e c t e d 100755 4. git apply –reject xxx.patch
然后再手动修改冲突,find ./ -name *.rej找到这些冲突的补丁,手动打上
5.git am同样有–reject选项,添加这个选项可以将能打上的补丁先打上,冲突的文件生成*.rej文件。

打入 patch / diff:
git apply xxx.patch
git apply xxx.diff
检查 patch / diff:
git apply –check xxx.patch
git apply –check xxx.diff
若git和需要打patch的文件不在一个目录:(git在framework下,patch要打入frameworks/base/下)
git apply –check –directory=base/ xxx.patch
git apply –directory=base/ xxx.patch
** git am 后面会说到,以及生产patch和打

补充:

  在Yocto中编译过程中打补丁时,也可以使用这种方法,补丁中的文件路径名是可以改的,不影响补丁的成功打入。

参考:http://blog.csdn.net/maotianwang/article/details/11107083?reload

猜你喜欢

转载自blog.csdn.net/congqianwozhidao/article/details/80337123