我可以使用“repo”工具克隆Android源代码。但是,我想要做的是以比11GB足迹更小的方式克隆源代码。它似乎下载了与每个Android设备和每个先前版本相关的内容。我试过想通过检查这样一个特定的分支来减少这个:
repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
然而,最终发生的事情是,我仍然只涉及一个特定的快照(可理解)。但有没有办法限制克隆的数量?
答案 0 :(得分:4)
android源代码树由许多单独的git存储库组成,这些存储库都由repo管理。您无法真正减少为给定git存储库下载的数据量。
但是,您只能使用repo sync <project>
下载可用的git repos的子集。即如果您只想要框架/基础包,那么在完成初始repo sync frameworks/base
之后,您应该能够repo init
。
如果你真的想要构建源代码,你可能想要完整的东西。
您可以通过删除不需要的设备存储库来保存一两个演出。您可以通过编辑&lt; source&gt; /。repo / manifest.xml并删除不需要的设备的存储库来完成此操作。
答案 1 :(得分:3)
你可以做很多事情。首先,&#34; repo sync&#34;使用-c参数会将签出的沙箱限制为仅当前&#34;当前&#34;科。回购同步不会下载其他分支的材料。
您还可以编辑.repo / manifests / default.xml清单。我所做的是备份它,例如&#34; default.bak&#34;然后从我知道我不需要的default.xml文件中删除行。因为我没有在Macintosh上构建,所以我知道我不需要任何&#34; darwin&#34;工具,所以我删除了包含&#34; darwin&#34;的每一行。然后&#34; repo sync&#34;不会下载任何darwin项目或在沙盒中安装源代码。
如果您已经同步了一个沙盒,并且想要修剪它的大小,可以像上面一样去除项目,然后执行&#34; repo sync -c -l&#34;,并且repo sync将仅删除您刚刚删除的目录。 -l标志仅执行同步的本地部分,这意味着它仅将本地git项目与源树同步。网络未使用。见&#34; -n&#34;标记为正常同步的另一半,它执行网络同步以使用上游存储库更新本地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项目和你的沙盒直接进行。您可以通过执行&#34; mma -B -n&#34;来测试构建以查看您是否已删除太多内容。在您的项目目录中。这将尝试对目标进行完全依赖构建,即使他们不需要也会强制构建所有目标,并且它将以干运行的方式执行。如果构建失败,则删除了项目所需的内容。
您还可以设置本地镜像沙箱,并从镜像中创建小型工作引用沙箱。工作沙箱不包含git对象存储,但是引用镜像中的中心存储。使用&#34; repo init -u ... --mirror&#34;设置镜像,&#34; repo init --reference =〜/ android-mirror -u ...&#34;引用镜子。后者中的-u标志允许将真正的上游存储库用作权限,而镜像引用则用作本地缓存。本地镜像还可以避免AOSP项目强制执行的下载配额,并且它们可以更快地同步到。