如何使用“repo”来克隆最小的android源代码?

mklgxw1f  于 2023-10-14  发布在  Android
关注(0)|答案(2)|浏览(219)

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

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

然而,最终发生的是,我仍然把所有的事情都包括在内,只是在一个特定的快照(可以理解)。但是有没有办法限制克隆的数量呢?

eh57zj3b

eh57zj3b1#

android源代码树由许多独立的git仓库组成,它们都由repo管理。对于给定的git仓库,你无法真正减少下载的数据量。
但是,您只能使用repo sync <project>下载可用的git存储库的一个子集。也就是说,如果你只想要框架/基本包,你应该能够在完成初始的repo init之后完成repo sync frameworks/base
如果你真的想构建源代码,你可能想要完整的东西。
您可以通过删除不需要的设备存储库来保存一两个gig。您可以通过编辑/. repo/manifest. xml并删除您不想要的设备的存储库来完成此操作。

gupuwyp2

gupuwyp22#

你可以做很多事情。首先,带有-c参数的“repo sync”将把 checkout 的沙箱限制为“当前”分支。仓库同步不会为其他分支下载材料。
您还可以编辑. repo/manifests/default.xml清单。我所做的就是备份它,比如“default.bak”,然后从default.xml文件中删除我知道我不需要的行。因为我不是在Macintosh上构建的,所以我知道我不需要任何“达尔文”工具,所以我删除了包含“darwin”的每一行。然后“repo sync”不会下载任何达尔文项目,也不会在沙箱中安装源代码。
如果你已经同步了一个沙盒,并且你想修剪它的大小,你可以像上面那样剥离项目,然后执行“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 sync会让你的git项目和沙盒再次恢复正常。您可以通过在项目目录中执行“mma-B-n”来测试构建,以查看是否删除了太多内容。这将尝试在您的目标上进行完整的依赖构建,强制所有目标进行构建,即使它们不需要它,并且它将作为一个干运行来完成。如果构建失败,则您删除了项目所需的某些内容。
您还可以设置一个本地镜像沙箱,并从您的镜像中创建小型的、工作的、引用沙箱。工作沙箱不包含git对象存储,而是引用镜像中的中心对象。使用“repo init -u. --mirror”设置镜像,“repo init --reference=~/android-mirror -u...”引用镜像。后者中的-u标志允许将真实的上游存储库用作授权,而镜像引用用作本地缓存。本地镜像也避免了AOSP项目强制执行的下载配额,并且同步速度更快。

相关问题