回购初始化
由于你看起来很精明,你知道repo只是一个python脚本,对吧?您可以阅读它以确切地了解它是如何工作的。我还没有通读整个内容,但是,基本上,它包装并提供了跨多个git存储库工作的支持。这个想法是有一个清单文件,用于指定不同版本的Android的要求。当您使用参数时,它会查看需要克隆哪些git存储库,您已经同步了哪些git存储库,以及获得正确的存储库后需要获取哪些分支。然后,它处理将其管理的所有存储库保留在适当的分支上。将存储库视为向标准 git 工作流添加另一层(我假设你对此很熟悉)。git
repo init
第一次使用存储库时,要获取主分支,需要使用
repo init -u https://android.googlesource.com/platform/manifest
之后,您需要同步服务器中的所有文件:
repo sync
这会将当前工作目录更新到由下载的清单的主版本指定的确切状态。要签出不同版本的 AOSP,请使用:
repo init -b version_name
这会将清单更新为包含有关所需 Android 版本的信息的清单(也称为分支)。
不要忘记同步。
若要切换到另一个清单分支,可以在现有客户端中使用。但是,由于这仅更新清单,因此需要后续(或)来更新工作目录文件。repo init -b otherbranch
repo sync
repo sync -d
您正在经历的行为可能看起来很奇怪,因为您可能不习惯使用如此容易覆盖本地状态的系统。使用 git 时,您不应该在同一目录中多次使用。另一种选择是为每个项目创建新目录。.repo 目录的目的是存储与当前存储库设置相关的所有信息(也类似于 .git 目录)。事实上,跑步可以做很多事情:init
repo init
- 从指定的 URL 下载清单。
- 尝试打开或创建 .repo 目录。
- 确保您的 GPG 密钥已设置。
-
克隆指定的分支(如果未指定任何分支,则默认为REPO_REV)。
- 验证它。
- 签出每个项目的相应分支。
我假设克隆操作会覆盖文件夹中的信息。运行第一个命令后需要很长时间的原因:.repo
repo init -u https://android.googlesource.com/platform/manifest
repo sync
是因为它必须下载许多千兆字节的信息。现在,从分支到存储库知道它只需要删除大约68个提交,这可以非常快速地完成。master
gingerbread
$ repo init -u https://android.googlesource.com/platform/manifest -b gingerbread
$ repo sync
...
.repo/manifests/: discarding 68 commits
...
回升意味着存储库必须再次下载这些提交所需的任何信息,并更新所有引用项目的当前分支。这将需要很长时间;存储库是用磁盘使用量换取处理时间。android_4.2.2_r1
真?
现在,这带来了一个问题:如果要同时比较两个存储库分支,该怎么办?这很困难,因为当您丢失正在查看的旧信息时。答案是复制相关信息,然后再复制。这将变得非常快 - 值得庆幸的是,如果你有磁盘空间,repo提供了一种加速此过程的方法。repo init && repo sync
repo init && repo sync
使事情变快的一种策略是在目录中创建本地镜像。然后,从新目录中的镜像中签出所需的分支,例如.现在,您只需更改为适当的目录即可在分支之间切换。workspace/master
workspace/gingerbread
在本地镜像 AOSP:
cd workspace
mkdir master && cd master
repo init --mirror
将导致存储库镜像本地计算机上的远程服务器。然后,当您想要切换到新分支时,您可以:
mkdir ../gingerbread && cd ../gingerbread
repo init -b version_name --reference=../master
结果是一个工作区,其中包含一个包含镜像的文件夹和一个包含姜饼分支的文件夹,该分支在可能的情况下引用镜像。
另一种选择是简单地初始化和同步所需的分支,然后将文件夹复制到另一个位置,然后使用副本再次初始化和同步。存储库应仅下载缺少的内容。
其他回购用途:
此外,存储库还支持将命令(如 )传递给给定清单中的所有不同 git 存储库,以便您在使用代码时不必担心这一点。它还通过使您可以轻松地将本地更改提交到gerrit代码审查系统来促进协作。我不确定将AOSP划分为多个git存储库的官方原因是什么,但我认为这样做是为了管理版本控制的扩展问题,并保持项目的健壮性和容错性(如果有人制动一个git存储库,它不会破坏整个AOSP)。还有必要提供一种供应商可以回馈源代码的方法,并让他们管理自己的git存储库,这些存储库可以简单地注册到总体清单中是有意义的。我没有回答你的问题行项目,但希望我提供了一些背景。init
branch