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目标仓库

  • 搜索目标仓库
    搜索
  • 点击红框所示按钮
    fork01
  • 选中自己的个人账户,确认,即可fork目标仓库至自己名下。

fork02
fork成功后会在自己关注的仓下新增目标仓,后续的代码修改及提交全是在此仓操作。
fork03

创建远程分支

  • 在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值