打patch的方法

原创 2015年11月26日 15:24:50

如果我们现在有一份源码,另外还有一份基于上一版本的patch,

所谓patch即补丁,为了实现某一功能或修改某些bug而生成的。

1>先来看看patch的语法,这里以patch一块的内容为例

diff --git a/minui/minui.h b/minui/minui.h
old mode 100644
new mode 100755
index a73eb7b..3ea87f9
--- a/minui/minui.h
+++ b/minui/minui.h
@@ -59,6 +59,8 @@ int gr_measure(const char *s);
 void gr_font_size(int *x, int *y);
 
 void gr_blit(gr_surface source, int sx, int sy, int w, int h, int dx, int dy);
+void gr_BarAndBall(gr_surface source, int sx, int sy, int w, int h, int dx, int dy);//<ASUS_BSP Jie_Lain 20151112 +++> add for RecoveryUI
+
 unsigned int gr_get_width(gr_surface surface);
 unsigned int gr_get_height(gr_surface surface);
①minui.h表示需要修改的文件,---表示源文件minui.h,+++表示目标文件minui.h

@@是diff的块差异语法,即开始修改的行数,用@@来标记开始和结束

这里的标记是@@-59,6 +59,8@@

②-59即源文件的第59行,-59,6表示原文件59行开始的6行

故+59,8表示目标文件59行开始的8行,

没有+-符号的行表示没有改动的行:

int gr_measure(const char *s);

 void gr_font_size(int *x, int *y);
 void gr_blit(gr_surface source, int sx, int sy, int w, int h, int dx, int dy);

③然后+开始加内容了

+void gr_BarAndBall(gr_surface source, int sx, int sy, int w, int h, int dx, int dy);//<ASUS_BSP Jie_Lain 20151112 +++> add for RecoveryUI
+

加一行指定内容和空行

后面两行又是没有改动的内容

语法就是这样,很简单吧


2>下面介绍打patch的方法

①先来看看我的patch是哪里的,

看名字 0001-update-recovery-ui.patch

明显这是bootable/recovery的patch,所以需要先进去目录

$cd bootable/recovery/

②git am

$git am ~/patch

这里的~/patch指我的patch所在的目录,patch放在哪里路径就写什么好了

由于patch显然是用git format-patch来生成的,所以用git的工具应该就可以很好的做好。git-am 就是作这件事情


执行git am ~/patch后,如果所修改的文件都能按照patch所描述的diff添加或修改进入,就会直接修改,否则报错,可以看到这里有众多error

由于目前的patch是上以版本的patch,由于行号变量等不一致,所以打到当前版本很有可能会不成功,这时候就需要我们手动修改patch所要修改的内容

来实现patch的功能

③git apply patch --reject

$git apply ~/patch --reject

这条命令就是指出所有patch不成功的段,并生成rej文件在相应目录下,rej文件其实就是patch不成功的那一小部分


再去看看git status

可以看到刚刚生成的rej文件了呢

所以根据rej文件的内容修改code就好了呢,需要适当修改行数变量什么的,自己掌握就好了

修改好后build通过后,将rej文件删除,将修改过或添加的文件$git add后(如果添加所有改动$git add --all)

$git am --continue代表我们已经修改好了error,注意一定修改正确后再执行--continue,否则将退出am状态

或者退出am恢复原有分支$git am --abort



版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/miss_lazygoat/article/details/50056407

Linux下生成patch和打patch

通过diff工具生成补丁, patch工具打上补丁. 在使用diff之前, 你需要保留一份未修改过的源码, 然后在其它地方修改源码的一份拷贝. diff对比这两份源码生成patch. 修改过的源...
  • dl0914791011
  • dl0914791011
  • 2013-12-13 10:58:32
  • 18735

如何制作LINUX的patch文件及如何打patch

如何制作LINUX的patch文件及如何打patch 对某个版本的Linux内核做了修改以后,如果希望发布出去给别人用,那么就需要制作针对此版本的patch文件。 patch文件也叫补丁,就是一个...
  • zhenwenxian
  • zhenwenxian
  • 2012-12-23 17:03:00
  • 20515

生成和打上patch的方法

简言之: 1.打Patch 在Kernel目录下打Patch,如0001-kernel-support-AUO-2k.patch。 查看这个.patch可知Patch目录:diff --git ...
  • daniel80110_1020
  • daniel80110_1020
  • 2016-11-07 16:35:13
  • 1223

如何打patch 及git 打patch 失败的处理方法

最近分配了一些打patch的任务。打的那个叫稀巴烂。想必对我很失望。这个过程中学到了如何打patch. 正常来说我们打的git生成的标准patch如果没有没有问题那很好打。 只需要进入patch对应的...
  • RonnyJiang
  • RonnyJiang
  • 2017-01-11 15:46:56
  • 4095

openwrt 打PATCH方法

都是来自己官网,先写上,日后整理
  • wzw88486969
  • wzw88486969
  • 2014-11-11 18:12:24
  • 7607

linux patch 命令小结

说到patch命令,就不得不提到diff命令,也就是制作patch的必要工具。diff命令,在制作patch文件的时候,基本上只需要使用到diff -Nau 这个参数,如果比较的是文件夹,还要加上...
  • wh_19910525
  • wh_19910525
  • 2012-04-26 20:25:41
  • 79565

摘录:Linux打Patch的方法

作为程序员,了解diff&patch命 令是非常必要的。比如说我们发现某个项目有bug代码,而自己又没有svn的提交权限,那么此时最合适的解决方法就是用diff命令做一个补丁发给项目成 员。项目成员通...
  • sunyubo458
  • sunyubo458
  • 2011-08-12 09:46:58
  • 27478

巧用svn create patch(打补丁)方案解决定制版需求

最近项目定制版越来越多,维护,同步代码非常费事。以前的思路如下图:   以前的svn目录结构如下图: 这样问题有2个: 若在一个定制包中修复了其他定制包也有的bug,同...
  • xyw591238
  • xyw591238
  • 2016-07-15 09:42:26
  • 1270

如何打patch

patch文件中如果第一行如果如下:diff -Nurp linux-2.4.31/Documentation/Configure.help linux-2.4.31-layer7/Documenta...
  • zhaozhanyong
  • zhaozhanyong
  • 2010-06-18 16:32:00
  • 5176

如何使用git 生成patch 和打入patch

平时我们在使用git 管理项目的时候,会遇到这样一种情况,那就是客户使用git 生成patch 给到我们,那我们就需要把客户给到patch 打入到我们的project ,基于这样一个场景,我把git ...
  • liuhaomatou
  • liuhaomatou
  • 2017-01-13 17:36:39
  • 22844
收藏助手
不良信息举报
您举报文章:打patch的方法
举报原因:
原因补充:

(最多只允许输入30个字)