以前不使用 patch 时,在调试过程中,为了保证不出问题,每个客户的问题,我都会完整的进行一遍源码下载,修改,编译的过程,这不仅使用巨量的时间去下载源码、编译,还会占用大量的磁盘空间,尤其是 android 源码,每个客户都需要占用大约 400G 左右的空间,十分的占用资源,这里使用 repo 工具,生成 patch,再使用 patch 打补丁,退回补丁的方式,记录下自己的修改,减少时间服务器的资源占用。
一、repo status 查看当前代码状态
1.1使用 repo status 查看当前代码状态
repo status
1.2 由上截图可以看出,有 5 个目录下的代码文件发生了改变
(1)freertos_safetyos/
(2)lk_boot/chipdev/
(3)lk_boot/exdev/
(4)lk_boot/hal/
(5)lk_boot/target/
二、repo diff 查看代码改动
2.1 使用 repo diff + 目录,可以查看目录下的具体修改,比如 1.2 中 5 个路径都可以。
repo diff freertos_safetyos/
三、生成 patch 文件
3.1 使用 repo diff 结合 >/>> 命令可以把具体修改生成 patch 文件。
repo diff freertos_safetyos/ >> 1.freertos_safetyos.patch
3.2 打开文件查看是否生成了相应内容。
四、patch -p xx.patch 命令打补丁
4.1 把 patch 补丁文件传输到补丁中对应的 project 中才能用作打补丁。
4.2 使用 patch 打补丁到 freertos_safety
(1)为了对比,我这里先去掉 freertos_safety/ 目录之前的修改,repo status 可以看到已经没有 freertos_safety/ 了。
repo_status
(2)然后把刚才制作的 1.freertos_safetyos.patch copy 到 freertos_safety/ 目录中去运行 patch 命令打补丁。
cp 1.freertos_safetyos.patch freertos_safetyos/
cd freertos_safetyos/
patch -p1 < 1.freertos_safetyos.patch
或者使用相对路径也可以。
patch -p1 < ../1.freertos_safetyos.patch
(3)确认是否打上 patch 补丁
repo status
可以看到,包括 copy 进去的 1.freertos_safetyos.patch 的补丁文件,都被记录在 repo status 中了。
五、恢复初始代码
“4.2 使用 patch 打补丁到 freertos_safety” 的(1)章节中,我去掉了之前修改,这是如何做到的呢,请参考如下命令。
5.1 恢复指定目录的初始代码
repo forall freertos_safetyos/ -c 'git reset --hard && git clean -fdx'
这里恢复了 freertos_safetyos/ 的初始代码,所以如 4.2 (1)中看到的,repo status 中不再有 freertos_safetyos/ 目录中的记录了。
5.2 恢复全部目录下的初始代码
(1)首先查找并生成所有当前目录下的差异文件,并生成 patch。
(2)使用 repo forall -vc "git reset --hard" 命令恢复全部目录下的初始代码
repo status
repo forall -vc "git reset --hard"
repo status
六、总结
本文基于芯驰 X9E PTG4.3 的工程,使用 repo 工具,生成 patch,再使用 patch 打补丁,退回补丁的方式,记录下自己的修改,减少时间服务器的资源占用。
七、参考资料
[1]《X9_SDK_用户手册_Rev1.7》
芯驰 X9系列相关博文:
《基于芯驰 X9HP PTG4.1 修改 UART10 作为 linux 串口输出》
《基于芯驰 X9E PTG4.3 添加 PMU CTRLx 的控制驱动》
《基于芯驰 X9M PTG4.3 添加 I2C3, I2C4 资源到 android》
欢迎在博文下方留言评论,我们会及时回复您的问题。
如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com 作者:好景虚设
更多资讯,请扫码关注我们!