打patch的方法

来源:互联网 发布:淘宝网厨房用品 编辑:程序博客网 时间:2024/05/17 03:03

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

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

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

diff --git a/minui/minui.h b/minui/minui.hold mode 100644new mode 100755index 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



0 0
原创粉丝点击