打patch的方法

如果我们现在有一份源码,另外还有一份基于上一版本的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



  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 要使用git打patch,你可以按照以下步骤进行操作。首先,你可以使用命令`git apply --stat 0001-limit-log-function.patch`来查看patch的情况。然后,你可以使用命令`git apply --check 0001-limit-log-function.patch`来检查patch是否能够成功应用,如果没有任何输出,则说明没有冲突,可以继续打patch。接下来,你可以使用命令`git apply 0001-limit-log-function.patch`来应用patch文件。\[1\]如果你想上传patch文件,你可以参考这篇文章:https://blog.csdn.net/qq_21583139/article/details/119588733。在正式打patch之前,一定要先备份原项目代码,并将patch文件放到线上项目目录下。确保线上的当前最新commit与打patch时生成的patch文件是相同的。最后,你可以使用命令`git apply --check 0001-bugfix-for-sg.patch`来检查patch文件是否与项目冲突。如果没有冲突,你可以继续进行打patch的操作。\[2\]另外,如果你想生成一个补丁文件,你可以使用命令`git diff > test.patch`。这个命令会将所有修改的文件都打成一个补丁文件,但需要注意的是,这里是本地修改的,没有执行add缓存的操作。\[3\]希望这些信息对你有帮助! #### 引用[.reference_title] - *1* [git 打patch方法](https://blog.csdn.net/Chen_leilei/article/details/124153983)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [git项目如何打patch以及打patch的注意事项](https://blog.csdn.net/qq_21583139/article/details/127036451)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Git 打patch (打补丁)的使用](https://blog.csdn.net/qq_33210042/article/details/128097580)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值