RK3588开发踩坑记:从搭建私有Repo服务器到自定义分支管理的完整实战 RK3588开发实战私有代码仓库搭建与分支管理全攻略刚接手RK3588 Android12平台开发时团队协作和代码管理成了最头疼的问题。官方SDK更新频繁多个功能并行开发如何在不干扰主线代码的前提下让团队成员高效协作经过两个月的实战摸索我总结出一套从零搭建私有Repo服务器到灵活管理自定义分支的完整方案。1. 私有Repo服务器搭建搭建私有Repo服务器是团队协作的基础。不同于个人开发直接使用官方仓库企业级开发需要完整的代码管控体系。我们选择GitGitoliteRepo镜像的组合方案兼顾安全性与灵活性。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 gitSSH端口改为非标准端口如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.confadmins 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-urlssh://gitwww.rockchip.com.cn:2222/repo-release/tools/repo.git \ -u ssh://gitwww.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 -j43. 自定义Manifest管理官方manifest不适合直接用于团队开发我们需要创建定制版本# 克隆manifest仓库 git clone ssh://gitserver/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://gitserver/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 pathkernel namerk/kernel revisionrefs/tags/android-12.0-mid-rkr1/ !-- 修改后 -- project pathkernel namerk/kernel revisionfeature/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-filterU快速定位冲突文件对复杂冲突建议保持官方版本并重新应用本地修改通过git log --left-right --graph HEAD...android-12.0-mid-rkr2可视化差异5. 开发环境配置优化提升团队效率的关键工具链配置5.1 Repo初始化优化.repo/local_manifests/local_manifest.xml示例?xml version1.0 encodingUTF-8? manifest !-- 覆盖默认kernel仓库 -- remove-project pathkernel namerk/kernel/ project pathkernel nameinternal/kernel remoteinternal revisionfeature/gpu-optim/ !-- 添加私有组件 -- project pathvendor/private nameinternal/proprietary remoteinternal revisionmaster/ /manifest5.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 ARCHarm64 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-filterACM); 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记录解决方案后续同类冲突自动处理节省了大量时间。