OpenHarmony上库操作流程笔记
简介
OpenHarmony是HarmonyOS的开源版,由华为捐赠给开放原子开源基金会(OpenAtom Foundation)开源。第一个开源版本支持在128KB~128MB的设备上运行,欢迎参加开源社区一起持续演进。
https://openharmony.gitee.com
更新列表
- 2021-04-20 更新远端代码拉取及上库操作。
- 2021-04-21 更新编译过程裁剪xts测试用例模块。
- 2021-05-06 更新上库操作部分内容。
- 2021-06-10 更新代码获取方式和冲突解决方法。
- 2022-05-25 新增分之间同步修改方法实例。
上库操作相关
下载全量代码
repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
6月份L2开源后,kernel部分多出linux kernel,这部分代码体积还是比较大的,如果您只使用liteos,可以在下载代码的时候屏蔽掉拉取linux代码的动作,操作如下:
1、执行以上repo init …操作
2、打开.repo/manifests/default.xml文件:屏蔽或者删除"kernel_linux"所在行
3、再进行后续的repo sync等操作
说明:6月开源社区代码更新后,引入了lfs来管理大文件,所以只使用repo sync同步下来的代码并不全,需要在每个仓附加执行git lfs pull,安装lfs详见:git lfs安装及使用方法
fork目标仓库
- 搜索目标仓库
- 点击红框所示按钮
- 选中自己的个人账户,确认,即可fork目标仓库至自己名下。
fork成功后会在自己关注的仓下新增目标仓,后续的代码修改及提交全是在此仓操作。
创建远程分支
- 在kernel/liteos_a目录下,添加刚刚fork过的仓库为新的远端仓库:
git remote add --mirror=fetch Kiita https://gitee.com/Kiita/kernel_liteos_a.git
- 查看远端仓库:
git remote -v
如下:
Kiita https://gitee.com/Kiita/kernel_liteos_a.git (fetch)
Kiita https://gitee.com/Kiita/kernel_liteos_a.git (push)
origin https://openharmony.gitee.com/openharmony/kernel_liteos_a (fetch)
origin https://openharmony.gitee.com/openharmony/kernel_liteos_a (push)
注意:上图所示 origin为初始远程仓,Kiita为我们刚刚fork的远程仓。
创建本地分支
- 代码根目录下给所有仓创建纯净分支
repo start local_xxx --all
- 对应仓下给需要修改提交的仓创建分支
git checkout -b liteos_a_xxx
修改提交代码
- 代码修改git 基本操作:
$ git status
$ git diff
$ git add .
$ git commit (or git commit --amend)
注意git commit里边的代码修改描述信息不允许包含标点符号,一是不规范,还有可能导致push失败。
- 提交代码:
$ git push Kiita HEAD:liteos_a_xxx
$ git push Kiita HEAD:liteos_a_xxx -f //强推
注意:
1、首次修改提交可以以本地分支liteos_a_xxx名称提交,每次任务不能一致。
2、附加修改和提交,则需要加 -f 选项进行强推,既 git push Kiita HEAD:liteos_a_123 -f 会将所有相关的修改提到 分支liteos_a_123上。
push成功信息大概如下
Counting objects: 10, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (10/10), 1.12 KiB | 1.12 MiB/s, done.
Total 10 (delta 8), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-5.0]
remote: Create a pull request for 'Kiita' on Gitee by visiting:
remote: https://gitee.com/Kiita/third_party_lwip/pull/new/Kiita:Kiita...Kiita:master
To https://gitee.com/Kiita/third_party_lwip.git
* [new branch] HEAD -> Kiita
之后就可以在gitee上看到自己最新的提交
之后可以在线上创建PR,start build构建通过后新增Issues到最终合入等操作,后续补充
--------------------------------------------------------------------------分界线-------------------------------------------------------------------------------------
从某仓拷贝代码
开发过程中如果需要获取别人还未合入主线的代码,参考如下操作:
以zhangsan的liteos_a仓的master分支为例
注意:拉取代码后在所有仓使用repo start 创建分支
- 检查当前仓的分支:
$ git branch
- local_xxx //纯净分支
- 查询远端仓是否已存在zhangsan的这个仓:
$ git remote -v
origin https://openharmony.gitee.com/openharmony/kernel_liteos_a (fetch)
origin https://openharmony.gitee.com/openharmony/kernel_liteos_a (push)
- 若不存在,则在本地代码仓添加zhangsan为远端仓:
$ git remote add --mirror=fetch temp https://gitee.com/zhangsan/kernel_liteos_a.git
- 再次查询确认远端仓创建成功
$ git remote -v
temp https://gitee.com/zhangsan/kernel_liteos_a.git (fetch)
temp https://gitee.com/zhangsan/kernel_liteos_a.git (push)
origin https://openharmony.gitee.com/openharmony/kernel_liteos_a (fetch)
origin https://openharmony.gitee.com/openharmony/kernel_liteos_a (push)
若本地代码存在zhangsan的远端仓以上两步操作可以跳过,继续下一步
- 获取zhangsan仓的master分支然后切换:
$ git fetch temp master
$ git checkout master
- 或者将远端仓的所有更新取回本地再切换master分支:
$ git fetch temp //这里的temp尽量和zhangsan一致
$ git branch //查看所有fetch下来的分支
20210317
202103171502
OpenHarmony_1.0.1_release
- local_0420
master
master313
$ git checkout master
- 确认本地liteos_a的提交节点已更新:
$ git log
至此本地代码liteos_a已更新到zhangsan所属liteos_a仓master分支的提交内容
获取别人未合入PR的代码或代码合入过程中的冲突问题
以zhangsan遇到自己提的PR(zhangsan/pr_branch —> ohos/master)出现冲突为例:
注意:确保已存在对应的remote为自己fork过的远端仓,在push代码的时候使用的temp为远端仓的本地别名。若不存在,添加方式见上述 创建远程分支
git fetch origin master:new_branch // 创建新分支,并更新至ohos master最新提交位置。
git checkout new_branch
git cherry-pick xxxxx(存在冲突的commit ID或者想要获取pr的commit ID) //cherry-pick pr_branch存在冲突的提交
//因为存在冲突,cherry-pick可能会被打断,冲突的问题也更新在了new_branch本地分支上,进而修改冲突问题。
git add . //add解决冲突后的修改
git cherry-pick --continue
git push temp HEAD:pr_branch -f // 将解除冲突后的修改强制推送到要合入的分支上。
分支间同步操作
master分支同步至3.1分支
- 获取master分支上本次需要同步的修改内容的commit id 例如 8bb53bc2d59aa087706cbab172869786796b7426
- 使用git fetch命令同步创建3.1的本地仓分支,命令和执行结果如下:
git fetch origin OpenHarmony-3.1-Release:0525_mount_3.1
- 切换新建的分支,命令和执行结果如下:
git checout 0525_mount_3.1
- 将本次在master分支修改的内容通过cherry-pick同步过来,命令和执行结果如下:
git cherry-pick 8bb53bc2d59aa087706cbab172869786796b7426
- 将本次同步的修改提交至gitee个人fork的仓,之后再提PR进行审核合入,命令和执行结果如下:
git add .
git commit //ctrl+o && 回车 && ctrl+x
git push Kiita HEAD:0525_mount_3.1
上库常见错误
有问题欢迎在评论区提出哦
裁剪编译模块
对3518ev300来说,修改vendor下面18e的config.json文件
例如下图去除xts测试套模块的编译:
模块编译配置文件大概包含在如下路径:
- hm根目录/vendor/hisilicon/hispark_aries
- hm根目录/build/lite/components
- hm根目录device
QEMU相关
qemu编译错误
解决方法:
cd ~/code/OpenHarmony
python3 -m pip install --user build/lite
安装成功后可以which genconfig查看到genconfig安装的默认位置,
之后再继续编译
源码编译错误
是因为llvm版本太旧的问题,需要更新llvm,其中一种办法是:
cd ~/code/OpenHarmony
bash build/prebuilts_download.sh