在开源生态蓬勃发展的今天,越来越多的企业选择将OpenHarmony这样的开源操作系统适配到自己的硬件平台上。但直接将开源基线代码迁移到企业内部私有仓库,往往会遇到.git文件残留、LFS大文件处理、编译环境差异等一系列"暗坑"。本文将基于OpenHarmony 5.1.0-Release版本,手把手带你完成从官方开源仓到私有仓的无缝迁移。
在开始移植前,需要确保开发环境满足以下要求:
bash复制sudo apt-get update && sudo apt-get install -y git-lfs repo python3.8
获取OpenHarmony源码时,有几点关键注意事项:
v的版本标签(如OpenHarmony-v5.1.0-Release),避免使用不带v的标签-c参数,只获取当前分支内容具体操作命令:
bash复制mkdir -p ~/work/Release_5.1.0/code
cd ~/work/Release_5.1.0/code
repo init -u https://gitee.com/openharmony/manifest -b refs/tags/OpenHarmony-v5.1.0-Release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
注意:
--no-repo-verify参数跳过了证书验证,在企业内网环境中可以避免一些SSL问题,但在安全性要求高的环境中应谨慎使用。
在私有Git服务器上创建新仓库时,建议采用以下命名规范:
code复制<硬件平台>_OpenHarmony<版本号>_<自定义后缀>
例如:RK3568_OpenHarmony5.1.0_Custom
克隆私有仓库后,需要对.git目录进行特殊处理:
bash复制cd ~/work/OpenHarmony/new
git clone <私有仓库地址> RK3568_OpenHarmony5.1.0_Backup
cd RK3568_OpenHarmony5.1.0_Backup
mv .git .agit # 关键步骤:临时重命名.git目录
这个操作背后的原理是:后续的代码拷贝会覆盖所有文件,但我们需要保留私有仓库的.git信息用于后续提交。临时重命名可以避免被后续的删除.git操作误清理。
使用cp -ar命令保留所有文件属性和权限:
bash复制cp -ar ~/work/Release_5.1.0/code/* ~/work/OpenHarmony/new/RK3568_OpenHarmony5.1.0_Backup/
特别需要注意的是,一些关键隐藏文件可能被遗漏:
.gn:GN构建系统的配置文件.gclient:Chromium项目遗留的配置(部分组件需要).gitattributes:LFS文件配置建议手动检查并复制这些文件:
bash复制cp ~/work/Release_5.1.0/code/.gn ~/work/OpenHarmony/new/RK3568_OpenHarmony5.1.0_Backup/
清理.git和.repo目录是移植成功的关键步骤。推荐使用组合命令:
bash复制# 查找所有需要清理的文件
find ./ -name ".git*" -not -path "./.agit*" | xargs rm -rf
find ./ -name ".repo" | xargs rm -rf
# 特殊处理typescript的.gitattributes
mv third_party/typescript/lib/.gitattributes third_party/typescript/lib/_gitattributes
清理完成后恢复必要的.git配置:
bash复制mv .agit .git
mv third_party/typescript/lib/_gitattributes third_party/typescript/lib/.gitattributes
建议的编译顺序:
bash复制./build/prebuilts_download.sh --skip-ssl
git add:bash复制git add .
bash复制./build.sh --product-name rk3568 --ccache
提示:添加
--ccache参数可以显著提升后续编译速度,特别是在团队协作环境中。
提交代码时,commit message应包含以下关键信息:
示例提交命令:
bash复制git commit -m "基线移植: OpenHarmony-v5.1.0-Release
Date: 2023-11-20
Env: Ubuntu 20.04 LTS
Changes:
- 移除所有.git和.repo目录
- 保留必要.gitattributes
- 更新.gn配置"
对于企业级开发,推荐的分支策略:
| 分支类型 | 命名规范 | 用途 |
|---|---|---|
| 主干分支 | main | 稳定版本 |
| 开发分支 | dev/5.1.0 | 日常开发 |
| 特性分支 | feature/[功能名] | 新功能开发 |
| 热修复分支 | hotfix/[问题号] | 紧急问题修复 |
当遇到LFS文件下载问题时,可以尝试以下解决方案:
bash复制find . -name ".gitattributes" | xargs ls -la
bash复制git lfs install
repo forall -c 'git lfs pull'
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| 找不到gn命令 | 预编译未完成 | 执行./build/prebuilts_download.sh |
| 文件权限错误 | 拷贝时属性丢失 | 使用cp -ar保留属性 |
| 头文件缺失 | 依赖未完全下载 | 执行repo sync -c --force-sync |
| LFS文件缺失 | .gitattributes被修改 | 恢复原始.gitattributes文件 |
dockerfile复制FROM ubuntu:20.04
RUN apt-get update && apt-get install -y git-lfs repo python3.8
移植完成后,可以通过以下方式优化仓库性能:
bash复制git gc --aggressive
bash复制git clone --depth=1 <仓库地址>
bash复制rm -rf out/
对于长期维护,建议: