目录
- 前言
- 准备
- 操作步骤
- 精准移植基础PR到本地分支
- 修改代码
- 鸿蒙编译、调试、测试
- 具体编译指令、测试步骤这里带过,这不是本文论述重点
- 创建diff文件
- 工作仓库应用最新patch
- 总结
前言
作为程序员,多人协同开发同一个需求是正常的。即使是自己一个人搞需求,也会遇到自己所提的PR有多轮的检视,多次修改检视意见,提交到同一PR的场景。那么就存在基础PR在一段时间内始终处于未合入状态,而自己或其它合作人员需要基于基础PR(注意基础PR是动态变化,每打上新补丁,基础PR都会更新)做增量修改的情况。
今天就针对这种场景,如何提高开发/测试效率,进行讲解。测试环境是Windows10 wsl2,鸿蒙全仓docker镜像中以drivers_external_device_manager仓库的PR为操作对象。.
目的:在鸿蒙全仓下,将指定仓库的基础PR更新到本地,编译、多次修改,打patch(注意不用于
直接提交), 方便在合适的同名仓库提交最新修改。这样每次都是基于PR最新代码的动态增量修改
工具:git
基础仓库:基础PR所在的码云代码仓库
准备
码云账户密码 : niuma / xxxx
根据文章wsl2平台鸿蒙全仓docker编译环境快速创建方法创建鸿蒙容器开发环境
基准PR: https://gitee.com/openharmony/drivers_external_device_manager/pulls/6666
操作步骤
精准移植基础PR到本地分支
进入工作目录
cd /home/openharmony/drivers/external_device_manager
git checkout . # 取消本地所有修改
# 鸿蒙全仓各个仓库默认是没有分支的。若有分支,说明本地仓库进行了修改。
git branch -D xxx # 删除不需要的临时分支
添加关联代码上游分支
git remote add niuma https://gitee.com/niuma/drivers_external_device_manager.git
git remote -v # 验证添加结果
拉取基础仓库master分支最新代码并创建相关分支 #
git fetch niuma master # 可以是任意分支。创建的主要目的是为了后面删除test分支用的。git checkout -b master # 只需要创建一次git checkout -b test origin/master # 从鸿蒙全仓上且测试分支。 如果有test 分支,先删除 git branch -D test。若不想删除,需要创建新的分支。
查询基础PR的commit ID
git log niuma/master -3 # 记住基础PR最新的commitID
root@1b0695311d6f:/home/openharmony/drivers/external_device_manager# git log zhangquanchao/master -3
commit af3cd0588f8e4d0875ae928c153a71f3f9d631ba (zhangquanchao/master)
Author: niuma <niuma@xxx.com>
Date: Sat Jul 5 11:10:06 2025 +0800外设故障提醒框架能力补充fuzz用例Signed-off-by: niuma <niuma@xxx.com>commit a5ca975e34a3603329c5932da6627de5fe3c8752
Author: niuma <niuma@xxx.com>
Date: Fri Jun 27 10:29:57 2025 +0800外设故障提醒框架能力之二:主体功能代码Signed-off-by: niuma<niuma@xxx.com>commit 9fe11a39a89fff2111bc1b685517da4aac7fcfa2 (HEAD -> test, origin/weekly_20250630, origin/master, m/master)
Merge: 84807fe 366badd
Author: openharmony_ci <111111@qq.com>
Date: Mon Jun 23 03:23:44 2025 +0000!361 5.1.1告警清理enternalMerge pull request !361 from yyy/master
选择性应用基础PR到当前分支
git cherry-pick {基础PR最新的commitID}root@1b0695311d6f:/home/openharmony/drivers/external_device_manager# git cherry-pick af3cd0588f8e4d0875ae928c153a71f3f9d631ba
[test aa2b2d2] 外设故障提醒框架能力补充fuzz用例Date: Sat Jul 5 11:10:06 2025 +08006 files changed, 150 insertions(+)create mode 100644 test/fuzztest/driver_extension_manager_fuzzer/notifyusbperipheralfault_fuzzer/BUILD.gncreate mode 100644 test/fuzztest/driver_extension_manager_fuzzer/notifyusbperipheralfault_fuzzer/corpus/initcreate mode 100644 test/fuzztest/driver_extension_manager_fuzzer/notifyusbperipheralfault_fuzzer/notifyusbperipheralfault_fuzzer.cppcreate mode 100644 test/fuzztest/driver_extension_manager_fuzzer/notifyusbperipheralfault_fuzzer/notifyusbperipheralfault_fuzzer.hcreate mode 100644 test/fuzztest/driver_extension_manager_fuzzer/notifyusbperipheralfault_fuzzer/project.xml
验证
git log -3 # 查看日志log是否同步上了```bash
root@1b0695311d6f:/home/openharmony/drivers/external_device_manager# git log -3
commit aa2b2d29e1034572f5e684f1676c6a378ca3afdc (HEAD -> test)
Author: niuma <niuma@xxx.com>
Date: Sat Jul 5 11:10:06 2025 +0800外设故障提醒框架能力补充fuzz用例Signed-off-by: niuma <niuma@xxx.com>commit 9fe11a39a89fff2111bc1b685517da4aac7fcfa2 (origin/weekly_20250630, origin/master, m/master)
Merge: 84807fe 366badd
Author: openharmony_ci <111111@qq.com>
Date: Mon Jun 23 03:23:44 2025 +0000!361 5.1.1告警清理enternalMerge pull request !361 from yyy/mastercommit 366badd2c3325f0086a5e56a9f2b0d54b8ca5fca
Author: yyy <yyy@zzz.com>
Date: Sun Jun 22 03:33:20 2025 +0000update services/native/driver_extension_manager/src/ext_permission_manager.cpp.Signed-off-by: yyy <yyy@z.com>zzz.com
git show --stat # 检查PR修改是否一一对应,文件 、文件修改行数等, 与PR上"文件“子页面各个文件的信息比较。 一致表示同步完整
本地同步情况:
root@1b0695311d6f:/home/openharmony/drivers/external_device_manager# git show --stat
commit aa2b2d29e1034572f5e684f1676c6a378ca3afdc (HEAD -> test)
Author: niuma <niuma@xxx.com>
Date: Sat Jul 5 11:10:06 2025 +0800外设故障提醒框架能力补充fuzz用例Signed-off-by: niuma <niuma@xxx.com>test/fuzztest/driver_extension_manager_fuzzer/BUILD.gn | 1 +test/fuzztest/driver_extension_manager_fuzzer/notifyusbperipheralfault_fuzzer/BUILD.gn | 43 +++++++++++++++++++++++++++++++++++++++++++test/fuzztest/driver_extension_manager_fuzzer/notifyusbperipheralfault_fuzzer/corpus/init | 16 ++++++++++++++++test/fuzztest/driver_extension_manager_fuzzer/notifyusbperipheralfault_fuzzer/notifyusbperipheralfault_fuzzer.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++test/fuzztest/driver_extension_manager_fuzzer/notifyusbperipheralfault_fuzzer/notifyusbperipheralfault_fuzzer.h | 19 +++++++++++++++++++test/fuzztest/driver_extension_manager_fuzzer/notifyusbperipheralfault_fuzzer/project.xml | 25 +++++++++++++++++++++++++6 files changed, 150 insertions(+)
root@1b0695311d6f:/home/openharmony/drivers/external_device_manager#
PR情况:
testfuzztestdriver_extension_manager_fuzzerBUILD.gn +1notifyusbperipheralfault_fuzzerBUILD.gn +43corpusinit +16notifyusbperipheralfault_fuzzer.cpp +46notifyusbperipheralfault_fuzzer.h +19project.xml +25
结论:经过对比文件修改数发现一致。移植成功。
修改代码
鸿蒙编译、调试、测试
具体编译指令、测试步骤这里带过,这不是本文论述重点
创建diff文件
root@1b0695311d6f:/home/openharmony/drivers/external_device_manager# git diff >> 2345.diff
root@1b0695311d6f:/home/openharmony/drivers/external_device_manager# ll
total 92
drwxr-xr-x 11 root root 4096 Jul 5 08:52 ./
drwxr-xr-x 9 root root 4096 Jul 3 09:39 ../
-rw-r--r-- 1 root root 2258 Jul 5 08:52 2345.diff
-rw-r--r-- 1 root root 4014 Jul 4 12:31 bundle.json
-rw-r--r-- 1 root root 893 Jun 20 01:23 .clang-format
-rw-r--r-- 1 root root 837 Jul 4 12:31 extdevmgr.gni
drwxr-xr-x 2 root root 4096 Jun 20 01:23 figures/
drwxr-xr-x 5 root root 4096 Jun 20 01:23 frameworks/
....
工作仓库应用最新patch
git apply --check 2345.diff
git apply 2345.diff
总结
通过补丁diff,减少人工差错,提高工作效率。代码编辑和编译都在鸿蒙全仓,减少代码移植效率。