RK3588开发实战:私有代码仓库搭建与分支管理全攻略
刚接手RK3588 Android12平台开发时,团队协作和代码管理成了最头疼的问题。官方SDK更新频繁,多个功能并行开发,如何在不干扰主线代码的前提下,让团队成员高效协作?经过两个月的实战摸索,我总结出一套从零搭建私有Repo服务器到灵活管理自定义分支的完整方案。
1. 私有Repo服务器搭建
搭建私有Repo服务器是团队协作的基础。不同于个人开发直接使用官方仓库,企业级开发需要完整的代码管控体系。我们选择Git+Gitolite+Repo镜像的组合方案,兼顾安全性与灵活性。
1.1 服务器环境配置
服务器选用Ubuntu 22.04 LTS,基础软件包安装如下:
# 安装基础依赖 sudo apt update sudo apt install -y openssh-server git keychain python3-pip pip3 install pygit2关键配置点:
- 创建专用git系统账户:
sudo adduser --system --shell /bin/bash --group git - SSH端口改为非标准端口(如2222)降低扫描风险
- 禁用git账户的密码登录,仅允许密钥认证
1.2 Gitolite权限管理
Gitolite提供了细粒度的仓库访问控制:
# 安装gitolite sudo -u git bash git clone https://github.com/sitaramc/gitolite.git mkdir -p ~/bin gitolite/install -to ~/bin ~/bin/gitolite setup -pk admin.pub典型权限配置示例(gitolite-admin/conf/gitolite.conf):
@admins = admin1 admin2 @android_team = dev1 dev2 dev3 repo gitolite-admin RW+ = @admins repo RK_Android12_mirror/.* R = @android_team RW+ = @admins注意:权限配置更新后需要推送到服务器才会生效
2. 镜像RK官方代码库
保持与官方代码同步是定制开发的前提。我们采用全量镜像+增量同步策略:
# 初始化镜像仓库 sudo -u git bash cd /repos mkdir RK_Android12_mirror && cd RK_Android12_mirror repo init --repo-url=ssh://git@www.rockchip.com.cn:2222/repo-release/tools/repo.git \ -u ssh://git@www.rockchip.com.cn:2222/Android_S/rk3588-manifests.git \ -m Android12.xml \ --mirror # 首次同步(约50GB数据) .repo/repo/repo sync -c -j8同步优化技巧:
- 使用
-c参数只同步当前分支 -j8根据服务器CPU核心数调整并行任务数- 设置每日凌晨自动同步:
0 3 * * * /usr/bin/flock -n /tmp/rk_sync.lock -c "cd /repos/RK_Android12_mirror && .repo/repo/repo sync -c -j4"
3. 自定义Manifest管理
官方manifest不适合直接用于团队开发,我们需要创建定制版本:
# 克隆manifest仓库 git clone ssh://git@server/RK_Android12_mirror/manifests.git cp -r manifests my_team_manifest cd my_team_manifest # 修改默认分支指向 sed -i 's/refs\/tags\/android-12.0-mid-rkr1/refs\/heads\/my-team-dev/g' Android12.xml # 提交到新仓库 git init git remote add origin ssh://git@server/RK_Android12_mirror/my_team_manifest.git git add . git commit -m "Initial team manifest" git push -u origin master典型manifest修改场景:
- 替换特定模块为内部fork版本
- 添加私有组件仓库
- 固定第三方库的版本号
4. 分支管理与代码同步
4.1 功能分支开发流程
以修改kernel为例的分支操作:
cd kernel-4.19 # 从官方tag创建开发分支 git checkout -b feature/gpu-optim refs/tags/android-12.0-mid-rkr1 # 开发完成后推送到团队仓库 git push origin feature/gpu-optim:feature/gpu-optim对应的manifest修改:
<!-- 修改前 --> <project path="kernel" name="rk/kernel" revision="refs/tags/android-12.0-mid-rkr1"/> <!-- 修改后 --> <project path="kernel" name="rk/kernel" revision="feature/gpu-optim"/>4.2 同步官方更新
当RK发布新版本时,需要将官方更新合并到自定义分支:
# 获取最新代码 repo sync -c # 进入有自定义分支的仓库 cd kernel-4.19 git fetch origin android-12.0-mid-rkr2 # 合并到开发分支 git checkout feature/gpu-optim git merge android-12.0-mid-rkr2 # 解决可能的冲突 git mergetool git push origin feature/gpu-optim冲突解决策略:
- 使用
git diff --name-only --diff-filter=U快速定位冲突文件 - 对复杂冲突,建议保持官方版本并重新应用本地修改
- 通过
git log --left-right --graph HEAD...android-12.0-mid-rkr2可视化差异
5. 开发环境配置优化
提升团队效率的关键工具链配置:
5.1 Repo初始化优化
.repo/local_manifests/local_manifest.xml示例:
<?xml version="1.0" encoding="UTF-8"?> <manifest> <!-- 覆盖默认kernel仓库 --> <remove-project path="kernel" name="rk/kernel"/> <project path="kernel" name="internal/kernel" remote="internal" revision="feature/gpu-optim"/> <!-- 添加私有组件 --> <project path="vendor/private" name="internal/proprietary" remote="internal" revision="master"/> </manifest>5.2 自动化校验脚本
pre-commit钩子示例(保存为.git/hooks/pre-commit):
#!/bin/bash # 检查kernel配置变更 if git diff --cached --name-only | grep -q "kernel/.config"; then echo "检测到kernel配置修改,正在验证..." make -C kernel ARCH=arm64 rockchip_defconfig if ! git diff --exit-code kernel/.config; then echo "错误:请先执行'make savedefconfig'" exit 1 fi fi # 检查文件头版权声明 for file in $(git diff --cached --name-only --diff-filter=ACM); do case "$file" in *.c|*.h|*.cpp) if ! grep -q "Copyright" "$file"; then echo "错误:$file 缺少版权声明" exit 1 fi ;; esac done6. 团队协作最佳实践
经过多次迭代,我们总结出以下高效协作规范:
分支命名约定:
feature/*:新功能开发bugfix/*:问题修复release/*:预发布版本experimental/*:实验性修改
代码审查流程:
# 创建审查分支 git checkout -b review/gpu-fix git push origin review/gpu-fix # 使用git request-pull生成审查请求 git request-pull origin/master origin/review/gpu-fix每日构建验证:
# 合并所有通过审查的分支 repo forall -c 'git pull origin feature/*' # 触发自动化构建 make -j$(nproc) dist
遇到的最典型问题当属kernel分支合并冲突。有次RK更新了DRM驱动架构,与我们自定义的GPU优化产生严重冲突。最终通过git rerere记录解决方案,后续同类冲突自动处理,节省了大量时间。