repo init和repo sync实际上做了什么?

41
我在Android Enthusiasts发了这个问题,但是觉得那不是一个合适的地方,所以我把它从那里删除了,并在这里“再次”提问。
这是一个非常新手的问题,如果我有错请原谅,但我只是想清楚地理解基本概念。阅读repo帮助和Google的repo命令参考页面并没有真正启示。我从Google的参考页面中理解了一些东西,但我仍然需要更多的解释。
按照下载android源代码的说明,我在Ubuntu shell上执行了这两个命令:(我已经处理好了所有环境的先决条件。)
~/android4.2.2$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.2.2_r1.2
~/android4.2.2$ repo sync -j4

等待半天后,我下载完整个repo,结果在android4.2.2目录下有19G的下载内容。那么究竟发生了什么,并且为什么会达到19G,而Google表示只应该期望大约8G的源文件呢?
1个回答

66

repo是一个Python包装脚本,用于git,其Google Source页面将其定义为:

repo - 多Git存储库工具

  1. repo init命令在当前目录中初始化repo。也就是说,它下载最新的repo源和一个描述git存储库目录结构的manifest.xml文件,并将所有这些文件存储在当前目录的.repo子目录中。在您的情况下,您使用了一个可选的-b参数,该参数用于选择要检出的分支。默认情况下(即当未使用-b参数时),将使用主分支。

  2. repo sync更新工作树到最新版本。也就是说,它将本地项目目录与清单文件中指定的远程存储库同步。如果本地项目尚不存在,则会从远程存储库克隆一个新的本地目录,并根据清单中指定的设置跟踪分支。如果本地项目已经存在,则它将更新远程分支并将任何新的本地更改在新的远程更改之上进行变基。-j参数用于设置要执行的并行作业数。默认值可以在清单中定义,并且也可以像您的情况一样在命令行中覆盖。

为什么它达到了19G,而Google说我应该只期望大约8G的源文件?

这应该是因为除了源文件外,您还将获得自Android诞生以来的所有历史记录 :)

希望这有所帮助。


-j 参数设置并行作业的数量... 这是否意味着它在下载时可以增加4倍(以我的情况为例)?或者它是将整个内容分成4个子部分并在每个单独的部分中运行 repo,但仍在下载一个完整的东西吗? - Poly Bug
6
你可以在使用 repo init 命令时添加 --shallow 选项来创建一个浅克隆,它只包含每个 Git 版本库的有限历史记录。这会显然破坏源代码历史溯源的能力,无法查看修改是何时、如何引入(由谁进行)。 - Magnus Bäck
2
@PolyBug,如果您不需要repo/git提供的源代码更改历史记录和其他功能,则可以删除.repo/文件夹(以及项目文件夹中的.git/文件夹)。 - ozbek
运行 repo sync 两次或更多次是否会下载相同的大小?希望它足够智能,只下载修改过的部分。 - frogatto
@HiI'mFrogatto 不,repo sync 是增量的。除了清单更新外,未更改的文件不会再次下载。 - ozbek
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接