8

我可以使用“repo”工具克隆 Android 源代码。但是,我想做的是以比 11GB 占用空间更小的方式克隆源代码。它似乎下载了与每个 Android 设备和每个先前版本相关的东西。我试着认为我可以通过检查这样的特定分支来减少这种情况:

repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

然而,最终发生的事情是我仍然参与了所有事情,只是在一个特定的快照上(可以理解)。但是有什么方法可以限制克隆的数量吗?

4

2 回答 2

4

android 源代码树由许多独立的 git 存储库组成,它们都由 repo 管理。您无法真正减少为给定 git 存储库下载的数据量。

但是,您只能使用repo sync <project>. 也就是说,如果你只想要 frameworks/base 包,你应该可以在完成repo sync frameworks/base初始repo init.

如果你真的想要构建源代码,你可能想要完整的东西。

您可以通过删除不需要的设备存储库来节省一两次演出。您可以通过编辑 <source>/.repo/manifest.xml 并删除不需要的设备的存储库来完成此操作。

于 2012-04-12T04:16:58.593 回答
4

你可以做很多事情。首先,带有 -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 项目强制执行的下载配额,并且同步速度更快。

于 2015-01-29T14:23:16.047 回答