你可以做很多事情。首先,带有 -c 参数的“repo sync”会将签出的沙箱限制为仅“当前”分支。repo 同步不会下载其他分支的材料。
您还可以编辑 .repo/manifests/default.xml 清单。我所做的是对其进行备份,例如“default.bak”,然后从我知道我不需要的 default.xml 文件中删除这些行。因为我不是在 Macintosh 上构建,我知道我不需要任何“darwin”工具,所以我删除了包含“darwin”的每一行。然后“repo sync”不会下载任何 darwin 项目或在沙箱中安装源代码。
如果你已经同步了一个沙箱,并且你想修剪它的大小,你可以像上面那样删除项目,然后执行“repo sync -c -l”,repo sync 只会删除你刚刚删除的目录。-l 标志仅执行同步的本地部分,这意味着它仅将本地 git 项目与源代码树同步。网络未使用。正常同步的另一半参见“-n”标志,它执行网络同步以使用上游存储库更新本地 git 项目。
为了也删除不需要的项目(占用大量空间)的 git 支持对象存储,我使用这个:
for project in `diff ~/android/.repo/manifests/default.xml ~/android/.repo/manifests/default.bak | awk '{print $3}' | grep path | cut -f2 -d\"`; do rm -rf ~/android/.repo/projects/$project.git ; rm -rf ~/android/.repo/project-objects/$project.git ; done
这将查找备份清单中的所有项目,但已从活动清单中删除,并删除 git 项目及其所有支持数据。这恢复了很多空间。
如果删除太多,只需从备份清单中恢复项目行,然后将其重新添加到活动清单中。然后,一个 repo 同步将让你的 git 项目和你的沙箱再次直接。您可以通过在项目目录中执行“mma -B -n”来测试构建以查看是否删除了太多内容。这将尝试对您的目标进行完全依赖构建,强制所有目标构建,即使它们不需要它,并且它将作为试运行来完成。如果构建失败,您删除了项目需要的东西。
您还可以设置本地镜像沙箱,并从您的镜像创建小型、可工作的参考沙箱。工作沙箱不包含 git 对象存储,但参考镜像中的中心对象存储。使用“repo init -u ... --mirror”设置镜像,使用“repo init --reference=~/android-mirror -u ...”引用镜像。后者中的 -u 标志允许将真正的上游存储库用作权限,而将镜像引用用作本地缓存。本地镜像还避免了 AOSP 项目强制执行的下载配额,并且同步速度更快。