LV03-repo-01-repo简介与安装

本文主要是使用repo——简介与安装的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
PC端开发环境 Windows Windows11
Ubuntu Ubuntu20.04.2的64位版本
VMware® Workstation 17 Pro 17.6.0 build-24238078
终端软件 MobaXterm(Professional Edition v23.0 Build 5042 (license))
Win32DiskImager Win32DiskImager v1.0
Linux开发板环境 Linux开发板 正点原子 i.MX6ULL Linux 阿尔法开发板
uboot NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03)
linux内核 linux-4.15(NXP官方提供)
点击查看本文参考资料
点击查看相关文件下载
分类 网址 说明
--- --- ---

一、repo简介

1. 什么是repo?

repo,是一个多项目协同管理工具,为组件化客户端项目提供便捷。它其实是Google开发的用于管理Android版本库的一个工具,repo是使用Python对git进行了一定的封装,并不是用于取代git,它简化了对多个Git版本库的管理。用repo管理的版本库都需要使用git命令来进行操作。因此,使用repo工具之前,请先确保已经安装git。

2. 为什么要使用它

一个软件工程由于需要不断迭代开发,因此要对源代码进行版本管理。Android源代码工程(AOSP)也不例外,它采用Git来进行版本管理。AOSP作为一个大型开放源代码工程,由许许多多子项目组成,因此不能简单地用Git进行管理,它在Git的基础上建立了一套自己的代码仓库,并且使用工具Repo进行管理。

现代的代码版本管理工具,SVN和Git是最流行的。SVN是一种集中式的代码管理工具,需要有一个中心服务器,而Git是一种分布式的代码管理工具。不需要一个中心服务器。不需要中心服务器意味着在没有网络的情况下,Git也能进行版本管理。因此,单从这一点出发,Git要比SVN要方便很多。当然,Git和SVN相比,还有许多不同的理念设计,但是总的来说,Git越来越受到大家的青睐,尤其是在开源社区。Linux是采用Git进行版本管理,而越来越火的GitHub,提供也是Git代码管理服务。

前面提到,AOSP是由许许多项目组成的,例如,在Android 4.2中,就包含了329个项目,每一个项目都是一个独立的Git仓库。这意味着,如果我们要创建一个AOSP分支来做feature开发,那么就需要到每一个子项目去创建对应的分支。这显然不能手动地到每一个子项目里面去创建分支,必须要采用一种自动化的方式来处理。这些自动化处理工作就是由Repo工具来完成的。当然,Repo工具所负责的自动化工作不只是创建分支那么简单,查看分支状态、提交代码、更新代码等基础Git操作它都可以完成。

Repo工具实际上是由一系列的Python脚本组成的,这些Python脚本通过调用Git命令来完成自己的功能。比较有意思的是,组成Repo工具的那些Python脚本本身也是一个Git仓库。这个Git仓库在AOSP里面就称为Repo仓库。我们每次执行Repo命令的时候,Repo仓库都会对自己进行一次更新。

上面我们讨论的是Repo仓库,但是实际上我们执行Repo命令想操作的是AOSP。这就要求Repo命令要知道AOSP都包含有哪些子项目,并且要知道这些子项目的名称、仓库地址是什么。换句话说,就是Repo命令要知道AOSP所有子项目的Git仓库元信息。我们知道,AOSP也是不断地迭代法变化的,例如,它的每一个版本所包含的子项目可能都是不一样的。这意味着需要通过另外一个Git仓库来管理AOSP所有的子项目的Git仓库元信息。这个Git仓库在AOSP里面就称为Manifest仓库(清单库)。

到目前为止,我们提到了三种类型的Git仓库,分别是Repo仓库、Manifest仓库和AOSP子项目仓库。Repo仓库通过Manifest仓库可以获得所有AOSP子项目仓库的元信息。有了这些元信息之后,我们就可以通过Repo仓库里面的Python脚本来操作AOSP的子项目。那么,Repo仓库和Manifest仓库又是怎么来的呢?答案是通过一个独立的Repo脚本来获取,这个Repo脚本位于AOSP的一个官方网站上,我们可以通过HTTP协议来下载。

现在,我们就通过一个图来来勾勒一下整个AOSP的Picture,它由Repo脚本、Repo仓库、Manifest仓库和AOSP子项目仓库组成,如图所示:

image-20240926230946701

二、怎么安装repo?

这里我只在ubuntu中安装repo进行学习,windows下也能装,但是好像问题比较多,就没去折腾了。

1. 准备工作

确保已经安装了python和git两个软件以及curl。

1
2
3
4
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib \
g++-multilib libc6-dev-i386 lib32ncurses5-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev \
libxml2-utils xsltproc unzip python-pyelftools python3-pyelftools device-tree-compiler libfdt-dev \
libfdt1 libssl-dev liblz4-tool python-dev libncurses5 make

主要是这个工具在安卓源码编译的时候才用到,所以这里就把搭建安卓环境所需的都装了一遍。然后python设置成了python2:

1
2
sudo rm -rf /usr/bin/python
sudo ln -s /usr/bin/python2 /usr/bin/python

注意

其实后面安装完脚本后,会发现它里面其实使用的应该是python3,但是我使用的ubuntu20.04,然后安装的python3,但是后面又把默认的python命令设置成了python2,repo应该是直接使用的python3命令,所以这里暂时这样搞吧。

image-20240926214151905

2. curl命令下载

然后执行以下命令安装即可:

1
2
3
4
5
6
7
8
9
mkdir -pv ~/2software/repo_bin # 创建安装目录

# curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/2software/repo_bin/repo # 国内站点 清华源
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/2software/repo_bin/repo # 国外站点

chmod a+x ~/2software/repo_bin/repo # 赋予权限

echo "export PATH=~/2software/repo_bin:$PATH" >> ~/.bashrc # 添加环境变量
source ~/.bashrc # 使环境变量生效

其实下载下来的repo文件只是一个使用Python编写的引导脚本(Google 称之为 Repo launcher,本质上是一个python脚本,可以使用vim打开的),完整的repo(即,repo的主体部分)还没有下载。

image-20240922160351689

3. 测试是否生效

我们直接开一个终端执行:

1
repo --help

若安装成功则会有如下打印信息:

image-20240926214613640

三、repo主体

1. Gitee仓库

上面我们下载下来的知识repo的一个引导脚本,实际的主体部分还没下载,它的源码在Gitee上有一个仓库:

repo: Repo 是一个用于批量管理多仓库工程的工具,本仓库主要对 repo 做了二次开发,使其支持 Gitee Fork+PullRequest 流程

image-20240926214823777

2. Google官方参考资料

官网首页好像是这个:Google Code Archive - Long-term storage for Google Code Project Hosting.

image-20240926215025031

我们可以在这里找到它的文档(需要科学上网):Repo 命令参考资料 | Android Open Source Projectimage-20240926214937763

它的仓库在这里:GerritCodeReview/git-repo: repo - The Multiple Git Repository Tool - (mirror of https://gerrit.googlesource.com/git-repo) (github.com),其实在主页都能找到,主要是要科学上网。