Skip to content
01.版本控制»02.repo工具»LV015-repo命令简介.md

LV015-repo命令简介

这里我们来解读一下 repo 的源码,看一些命令的基本实现。接下来,我们来看看 repo 的相关命令怎么执行的,怎么得到前面哪些目录的。这个 repo init 命令实际上是包含了两个操作:安装 Repo 仓库和 Manifest 仓库。其中,Manifest 仓库的地址由-u 后来带的参数给出。

后来想了一下,我们是使用这个工具,大概知道命令怎么用就可以了,正如我们使用git,但是其实并不怎么深入去了解内部详细的原理,当然 ,了解内部原理肯定对这些命令的使用自然会有更加清晰的认识。

一、概述

image-20240926231102172

前面我们知道 repo 需要关注当前 git 库的数量、名称、路径等,有了这些基本信息,才能对这些 git 库进行操作。通过集中维护所有 git 库的清单,repo 可以方便的从清单中获取 git 库的信息。 这份清单会随着版本演进升级而产生变化,同时也有一些本地的修改定制需求,所以,repo 是通过一个 git 库来管理项目的清单文件的,这个 git 库名字叫 manifests。

当打开 repo 这个可执行的 python 脚本后,发现代码量并不大(不超过 1000 行),难道仅这一个脚本就完成了 AOSP 数百个 git 库的管理吗?并非如此。 repo 是一系列脚本的集合,这些脚本也是通过 git 库来维护的,这个 git 库名字叫 repo。

在客户端使用 repo 初始化一个项目时,就会从远程把 manifests 和 repo 这两个 git 库拷贝到本地,但这对于 Android 开发人员来说,又是近乎无形的(一般通过文件管理器,是无法看到这两个 git 库的)。 repo 将自动化的管理信息都隐藏根目录的.repo 子目录中。

二、基本原理

参考Android源代码仓库及其管理工具Repo分析详解_Android_脚本之家这个文章吧,这里就暂时不多做分析了。

三、总结

其实按照自己的理解,repo基本原理大概就是,使用python脚本,解析我们从命令行输入的命令,然后对各个git仓库进行批量操作,git仓库的信息都是按照一定的规则写在xml文件中,初始化的时候也就是解析这个xml文件得到各个git仓库的地址,然后使用git pull或者fetch或者checkout等相关命令对每一个git仓库进行操作,这样在git仓库很多的时候我们就不需要进入每一个仓库执行相同的操作了。

莫道桑榆晚 为霞尚满天.