repo 是一个用于管理多个 Git 仓库的工具,特别适用于管理大型项目如 Android 的源码。它是由 Google 开发的,用于解决多个 Git 仓库的同步、管理和代码审查等问题。因此,做 Android 内核开发,首先要了解 repo 是什么,它是如何使用的?
repo 是一种代码版本管理工具,它是由一系列的 Python 脚本组成,封装了一系列的 Git 命令,用来统一管理多个 Git 仓库。
Android 源码引用了很多开源项目,每一个子项目都是一个 Git 仓库,每个 Git 仓库都有很多分支版本,为了方便统一管理各个子项目的 Git 仓库,需要一个上层工具批量进行处理,因此 repo 诞生。
repo 也会建立一个 Git 仓库,用来记录当前 Android 版本下各个子项目的 Git 仓库分别处于哪一个分支,这个仓库通常叫做:manifest 仓库。
官方的 repo 脚本下载方法:
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ./repo
由于官网被墙,目前可以使用的 repo 脚本下载方法如下(clone 命令两者选一):
$ git clone git://git.omapzoom.org/git-repo.git
$ git clone git://aosp.tuna.tsinghua.edu.cn/android/git-repo.git/
$ cp git-repo/repo ./repo
Android 源码分支其实由一个叫 manifest 仓库来管理起来的,因此,下载源码首先要 clone 这个 manifest 仓库。这个仓库里面有一个 XML 文件,其实就是一个文件清单,列出了本代码仓库依赖哪些代码,该去哪下载,分支是什么。
一般用 repo init 命令来 clone 这个 manifest 仓库,例如,如果要下载 Android 源码,则方法如下:
$ repo init -u https://android.googlesource.com/platform/manifest
当然,上面的官网被墙了,因此,推荐如下镜像(两者选一):
$ repo init -u git://git.omapzoom.org/platform/manifest.git
$ repo init -u git://aosp.tuna.tsinghua.edu.cn/android/platform/manifest
初始化完毕后,你会在本地的.repo 文件夹中看到 manifest 仓库的内容,这个文件夹中最重要的文件是 manifest.xml(有的仓库用的是 default.xml,然后指向具体的 xml),它就是上面说到的文件清单。
如果要选择特定版本的 Android 源码,或者在已下载的源码基础上切换到其他版本,则可以使用-b选项:
$ repo init -u git://git.omapzoom.org/platform/manifest.git -b android-13.0.0_r3
$ repo init -u git://aosp.tuna.tsinghua.edu.cn/android/platform/manifest -b android-13.0.0_r3
然后使用 repo sync 命令进行同步即可下载好全部的 Android 源码了。
上面提到了 repo init 需要初始化一个 manifest 仓库,仓库中含有一个很重要的 manifest.xml 文件清单,其实这个 manifest.xml 并不复杂的,它就是用 XML 文件的格式记录了本项目依赖的各个 Git 仓库的名称、地址,以及分支等信息。常用的元素如下所示:
常用命令如下:
repo init
repo sync
repo start
repo checkout
repo branches
repo status
repo diff
repo info