3、Git与Repo工具:安装Git、配置SSH密钥、安装Repo工具、理解Repo的工作流
好,咱们进入第三节课。说实话,这一章的内容是AOSP开发的「入场券」。你想想看,没有Git和Repo,你连代码都拉不下来,后面的编译、调试全是空谈。我在带新人时,经常看到有人卡在这一步——不是SSH密钥配错了,就是Repo装不上。嗯,今天咱们就把这些坑一个个填平。
3.1 安装Git
Git是AOSP的基石。整个Android源码都是用Git管理的,每个仓库都是一个独立的Git项目。我个人习惯用最新稳定版,别用系统自带的旧版本——我在项目中遇到过因为Git版本太低导致repo sync失败的情况,折腾了半天才发现是版本问题。
Ubuntu/Debian系统:
sudo apt-get update
sudo apt-get install git git-lfs
macOS系统:
brew install git git-lfs
装完后验证一下:
git --version
# 输出示例:git version 2.39.2
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"
为什么要配?因为Git每次提交都会记录作者信息。你想想看,如果没配,提交记录里会显示一堆奇怪的默认值,后面查问题都找不到人。
3.2 配置SSH密钥
拉取AOSP源码,推荐用SSH协议。为什么?因为HTTPS经常被墙,而且每次都要输密码,烦不烦?SSH配好了,一劳永逸。
第一步:生成密钥对
ssh-keygen -t rsa -b 4096 -C "你的邮箱@example.com"
执行后,系统会问你保存路径和密码。我建议直接回车用默认路径(~/.ssh/id_rsa),密码可以留空——当然,如果你对安全性要求高,设一个也行。
第二步:把公钥添加到Git服务器
查看公钥内容:
cat ~/.ssh/id_rsa.pub
复制全部输出,然后登录你的Git托管平台(比如Gerrit、GitHub、GitLab),在SSH Keys设置里粘贴保存。
第三步:测试连接
ssh -T git@android.googlesource.com
如果看到类似「Welcome to Gerrit Code Review」的提示,说明配置成功了。
3.3 安装Repo工具
Repo是Google专门为AOSP开发的一个工具。说白了,它就是Git的「管家」——帮你同时管理几百个Git仓库。你想想看,AOSP有上千个仓库,一个个git clone得克隆到猴年马月?Repo就是来解决这个问题的。
安装步骤:
# 创建bin目录(如果不存在)
mkdir -p ~/bin
# 下载Repo脚本
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
# 赋予执行权限
chmod a+x ~/bin/repo
# 把~/bin加入PATH
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
source ~/.bashrc
验证安装:
repo --version
如果输出版本号,就说明装好了。
避坑指南:我曾经在Windows上用Repo,结果各种路径问题。后来我学乖了——AOSP开发,老老实实用Linux或macOS。Windows用户建议装WSL2或者直接上Ubuntu虚拟机。
3.4 理解Repo的工作流
Repo的工作流,其实就三个核心概念:manifest、sync、upload。咱们一个一个说。
3.4.1 Manifest文件
Manifest是一个XML文件,它定义了AOSP包含哪些仓库、每个仓库的路径、分支、提交ID。你可以把它理解成「购物清单」——Repo拿着这个清单,去Git服务器上把代码一个个拉下来。
默认的manifest在:.repo/manifests/default.xml
一个典型的manifest条目长这样:
<project path="packages/apps/Settings"
name="platform/packages/apps/Settings"
revision="android-14.0.0_r1" />
这里path是本地路径,name是远程仓库名,revision是分支或Tag。
3.4.2 Repo Sync——拉取代码
这是最常用的命令:
repo sync -j8
-j8表示并行下载8个仓库。我建议根据你的CPU核心数来设,比如4核设-j4,8核设-j8。设太大反而会卡。
第一次sync会非常慢——AOSP完整源码大概30-50GB,网速好的话也要一两个小时。嗯,这时候可以去泡杯咖啡。
3.4.3 Repo Upload——提交代码
当你修改完代码,想提交到Gerrit审核时,流程是这样的:
# 在某个仓库内
git add .
git commit -m "我的修改"
# 回到AOSP根目录
repo upload
Repo会自动找到所有有未推送提交的仓库,然后逐个推送到Gerrit。它会打开一个编辑器让你填写审核信息,保存退出后就开始上传了。
3.4.4 其他常用命令
| 命令 | 作用 | 我的备注 |
|---|---|---|
repo start <分支名> |
创建一个新分支开始工作 | 我习惯用这个,避免直接改默认分支 |
repo status |
查看所有仓库的修改状态 | 比一个个git status快多了 |
repo diff |
查看所有仓库的差异 | 提交前必跑一遍,检查有没有漏改 |
repo forall -c "命令" |
对所有仓库执行同一命令 | 比如 repo forall -c "git checkout ." 一键还原所有修改 |
3.5 工作流实战:从拉取到提交
咱们走一遍完整流程,你感受一下:
- 初始化:
repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r1 - 拉取代码:
repo sync -j8 - 创建分支:
repo start my-feature - 修改代码:在某个仓库里改文件
- 提交:
git add→git commit - 上传审核:
repo upload
你看,是不是很清晰?说白了,Repo就是帮你把「管理几百个Git仓库」这件事,简化成了几个命令。
核心要点:
- Git管理单个仓库,Repo管理整个AOSP项目
- Manifest是「地图」,告诉Repo去哪里拉代码
- Sync是「下载」,Upload是「提交」
- 遇到网络问题,试试换源或加代理
好,这一章就到这里。下一章咱们开始真正搭建编译环境——装JDK、配置CCache、选编译目标。到时候你会看到,前面这些准备工作有多重要。