保姆级教程:用Gitolite+Repo在Ubuntu上为RK3588 Android12 SDK搭建私有代码仓库
保姆级教程:用Gitolite+Repo在Ubuntu上为RK3588 Android12 SDK搭建私有代码仓库
在嵌入式开发领域,代码管理一直是团队协作的核心痛点。特别是对于基于RK3588这类高性能芯片进行Android系统开发的团队来说,如何高效管理庞大的Android源码树,同时保持与上游厂商代码的同步,是每个技术负责人必须面对的挑战。本文将手把手带你搭建一个完整的私有代码托管环境,从零开始配置Gitolite权限管理系统,到完整镜像Rockchip官方SDK,再到定制团队专属的分支策略。
1. 环境准备与基础服务配置
搭建私有代码仓库的第一步是准备一个稳定的服务器环境。我们推荐使用Ubuntu 20.04 LTS作为基础系统,这个版本在长期支持周期内,且对ARM架构有良好支持。以下是详细的初始化步骤:
# 更新系统并安装基础依赖 sudo apt update && sudo apt upgrade -y sudo apt install -y openssh-server git python3-keychain关键配置点:
- 确保SSH服务正常运行:
sudo systemctl enable --now ssh - 创建专用git系统账户(禁止shell登录更安全):
sudo adduser --system --shell /usr/bin/git-shell --group git echo "/usr/bin/git-shell" | sudo tee -a /etc/shells
注意:生产环境建议禁用密码登录,仅允许密钥认证。编辑
/etc/ssh/sshd_config将PasswordAuthentication设为no。
2. Gitolite权限管理系统部署
Gitolite作为轻量级的Git仓库管理工具,可以精细控制每个仓库的读写权限。以下是具体安装流程:
管理员密钥准备:
# 在开发机上生成密钥对(如果尚未存在) ssh-keygen -t ed25519 -f ~/.ssh/gitolite-admin服务器端安装:
# 切换到git账户 sudo -u git -i # 安装Gitolite git clone https://github.com/sitaramc/gitolite.git mkdir -p ~/bin gitolite/install -to ~/bin # 初始化管理员 ~/bin/gitolite setup -pk /tmp/gitolite-admin.pub客户端管理仓库克隆:
git clone ssh://git@your-server-ip/gitolite-admin.git cd gitolite-admin
权限配置文件示例(conf/gitolite.conf):
@android_team = dev1 dev2 lead1 @qa_team = tester1 tester2 repo RK3588_Android12 RW+ = @android_team R = @qa_team3. RK3588 Android12 SDK完整镜像
镜像Rockchip官方代码库是后续开发的基础,这个步骤需要稳定的网络连接和足够的磁盘空间(建议预留100GB以上)。
服务器端操作:
sudo -u git -i cd /home/git/repositories mkdir RK3588_Mirror && cd RK3588_Mirror # 初始化repo工具 git clone https://gerrit.googlesource.com/git-repo # 同步Android12 SDK ./git-repo/repo init -u ssh://git@www.rockchip.com.cn:2222/Android_S/rk3588-manifests.git -m Android12.xml --mirror ./git-repo/repo sync -c -j$(nproc)常见问题处理:
- 同步中断:使用
repo sync -c -j4 --fail-fast降低并行任务数 - 磁盘空间不足:添加
--no-clone-bundle参数跳过大文件包下载 - 权限错误:确保
repositories目录属主为git用户
4. 团队定制化工作流搭建
基础镜像完成后,需要建立团队专属的开发流程。以下是关键步骤:
创建定制manifest仓库:
git clone ssh://git@your-server-ip/RK3588_Mirror/manifests.git cp -r manifests team_manifest && cd team_manifest # 修改default.xml指向团队仓库 git init && git add . && git commit -m "Initial team manifest" git push --set-upstream ssh://git@your-server-ip/RK3588_Mirror/team_manifest.git master分支策略配置:
<!-- 在team_manifest/default.xml中添加 --> <remote name="team" fetch="ssh://git@your-server-ip/RK3588_Mirror/" /> <default revision="team/main" remote="team" sync-j="4" />开发客户端初始化:
mkdir RK3588_Dev && cd RK3588_Dev repo init -u ssh://git@your-server-ip/RK3588_Mirror/team_manifest.git repo sync -c -j$(nproc)
5. 日常开发工作流实践
在实际开发中,团队需要遵循规范的代码管理流程:
功能开发流程:
- 创建特性分支:
repo start feature/new-driver --all - 提交代码到私有仓库:
cd kernel/drivers git add new_driver.c git commit -m "Add new driver support" git push team HEAD:refs/for/feature/new-driver
同步上游更新:
# 服务器端更新镜像 .repo/repo/repo sync -c # 客户端合并更新 repo sync -c repo rebase team/main权限管理矩阵示例:
| 操作类型 | 开发工程师 | 技术主管 | 测试工程师 |
|---|---|---|---|
| 代码推送 | 仅特性分支 | 全部 | × |
| 代码审核 | √ | √ | √ |
| 主干合并 | × | √ | × |
| 仓库创建 | × | √ | × |
6. 高级维护与问题排查
长期运行的代码仓库需要定期维护,以下是一些实用技巧:
存储优化:
# 定期执行仓库GC sudo -u git find /home/git/repositories -name "*.git" -type d -exec git --git-dir={} gc --aggressive \;常见错误处理:
- SSH连接超时:检查
~git/.ssh/authorized_keys权限应为600 - Repo同步失败:尝试删除
.repo/projects目录后重试 - 权限拒绝:确认gitolite-admin仓库的修改已成功推送
备份策略:
# 简单增量备份脚本示例 rsync -az --delete /home/git/repositories /backup/git-$(date +%Y%m%d)在RK3588项目实践中,我们发现定期清理repo工具的临时文件可以显著提升同步速度:
find .repo/project-objects -name "*.tmp" -delete