完全不需要重新从网络下载。对于 Android 庞大的代码库,利用现有的 .repo 目录进行本地引用 (Reference) 或 本地克隆 是最快且最节省空间的方法。
这里推荐使用 repo init 的 --reference 参数。这种方法利用你已经下载好的 SDK 中的 .repo 目录作为对象库,速度极快(几分钟内完成),且基本不占用额外的网络带宽。
方法:使用 --reference 创建干净副本
假设你的当前代码目录(已修改)路径为:~/project/s905y5_dev 你想建立的新备份目录(干净的)路径为:~/project/s905y5_clean
请按照以下步骤操作:
1. 创建新目录并进入
mkdir ~/project/s905y5_clean
cd ~/project/s905y5_clean2. 初始化 Repo (关键步骤)
使用与你第一次下载时完全相同的 repo init 命令,但要在最后加上 --reference 参数,指向你旧的代码目录。如果需要指定repo,可加参数 --repo-url=~/y5/.repo/repo
(如果你使用的是国内服务器):
repo init \
-u ssh://git@openlinux.amlogic.com/u-amlogic/platform/manifest.git \
-b u-amlogic \
-m openlinux/ott/u-amlogic-20250115-aosp.xml \
--reference=~/project/s905y5_dev(如果你使用的是海外服务器):
repo init \
-u ssh://git@openlinux2.amlogic.com/u-amlogic/platform/manifest.git \
-b u-amlogic \
-m openlinux/ott/u-amlogic-20250115-aosp.xml \
--reference=~/project/s905y5_dev原理解析:--reference会告诉 repo:“不要去服务器下载 git 对象(objects),直接去~/project/s905y5_dev/.repo里面找。” 只有当本地缺少某些对象时,它才会去联网获取。
3. 同步代码
repo sync -j8- 速度: 这步会非常快,因为主要是本地文件的 Check out(检出),而不是网络下载。
- 状态: 检出后的代码是纯净的,完全等同于服务器状态,不包含你在旧目录做的任何未提交的修改 (
git status是干净的)。
注意事项 (非常重要)
依赖关系: 使用
--reference后,新目录 (s905y5_clean) 会依赖旧目录 (s905y5_dev) 的.repo文件夹。- 风险: 如果你删除了旧目录
s905y5_dev,新目录可能会坏掉。 解除依赖: 如果你希望新目录完全独立(即便删了旧目录也能用),可以在 sync 完成后,执行:
# 这会将引用的对象真正拷贝过来,会占用更多磁盘空间,但断开依赖 repo sync --dissociate
- 风险: 如果你删除了旧目录
- 磁盘空间: 如果不使用
--dissociate,新目录只占用“工作区文件”的大小(约 30-50GB),而不会重复占用巨大的.repo对象库(约 100GB+)的空间。这是最省空间的做法。 - playready错误: 找到
.repo/manifests/openlinux/ott/u-amlogic-20250115-aosp.xml,注释掉
总结
你只需要执行带有 --reference=/你的/旧/SDK/绝对路径 的 repo init 命令,然后 repo sync 即可。这能在几分钟内为你还原一个干净的、和服务器一致的 SDK 环境。
评论