生活服务
教你如何搭建android源代码repo仓库
2024-12-20 23:40  浏览:65

如果你的开发是基于AOSP源码来建仓,那么搭建repo服务器和部署自己的repo仓库就是非常必要的工作了。

教你如何搭建android源代码repo仓库

现实中很多公司都是直接把AOSP源代码放在一个git仓库中来管理,这样做没什么毛病。但是如果开发团队人数较多,会存在一些明显的弊端:

  • AOSP源代码一般的大小是20GB,编译之后达到40GB以上。每次同步会很耗费时间。
  • AOSP源代码文件数量将近70W个,单个仓库的文件索引会很庞大,每次检索非常耗时。
  • AOSP和芯片平台厂商(例如qcom、mtk、rockchip等)的原始代码仓库,一般是以repo仓库结构提供的,而不是单个git仓库。改变仓库结构之后,人工维护的工作量比较大。

AOSP源代码结构复杂庞大,除了本身的代码模块之外,还集成了五六百个第三方仓库,这些仓库也会在不停的更新迭代。AOSP维护整个代码仓库框架就需要保持足够的灵活性,于是就引进了repo脚本来批量管理git仓库。AOSP的源代码切分的git仓库数量多达六七百多个。

如果我们想要跟上游平台仓库保持一致的仓库结构,很方便快捷的同步代码,而我们自己也能灵活的管理本地的扩展仓库,就需要搭建部署自己的repo仓库了。

在实际的团队开发实践中,代码管理框架一般是gerrit+repo的组合形式。gerrit的安装部署和权限管理等不是本文档的内容,请读者搜索网络材料来安装部署。本文档的主要内容包括:

  • 说明repo仓库的管理策略。
  • 如何建立清单仓库。
  • 如何批量切分git仓库。
  • repo仓库的操作使用。

本文档的服务器操作系统是ubuntu18.04。

新的操作系统安装包中已经包含了repo命令程序,可以直接通过下面的命令安装:

安装完毕,我们可以看到安装的实际上是一个repo的引导器。它还不是完整的管理工具。

通过cat命令查看一下repo文件,实际上是一个python3脚本.

客户端在同步仓库时一般用到的几个命令序列:

我们以清华大学官网的AOSP代码为例,操作一下repo的仓库同步。

repo init命令执行完毕,实际上就是下载了一个.repo目录下(repo命令版本过时,可以根据提示更新一下,也可以不用更新)。

我们看一下repo目录内容:

repo init干了这几件事情:

  • 下载repo工具仓库,其中包含了python脚本。在.repo/repo目录下。
  • 下载了manifests清单仓库,在目录.repo/manifests下,软链接包含了.repo/manifests.git目录。
  • 下载了一个仓库清单文件manifests.xml,其中包含default.xml。

repo批量管理仓库的内容就在default.xml中。我们看一下文件内容:

折叠

这个XML文件的语法,不是本文档的内容。简单说明一下几个关键的:

remote: 远程服务端repo仓库名称
project: 每个项目的git仓库
path: 客户端git仓库路径
name: 服务端git仓库名称
revision: 分支名称或者commit id
linkfile: 软链接文件,src和dest表示源和目的。
copyfile: 文件拷贝,src和dest表示源和目的。
groups: 分组。

概括一下repo批量管理仓库的方式:

  • repo init命令下载工具脚本仓库和清单仓库。
  • repo sync命令根据清单文件中的配置,下载远程仓库二进制文件。
  • repo start检出分支。

所以,repo仓库的管理核心就在manifest.git,而起关键作用的配置文件就是仓库清单文件xxx.xml,有多少个项目仓库,就有对应的xml清单文件。

接着就是关键问题:搭建repo服务器我们要做哪些事情?

简而言之:

  • 部署通用的工具仓库git-repo.git。
  • 部署自己的清单仓库manifests.git。
  • 编写清单文件manifests.xml
  • 批量创建工程子仓库和上传源代码。

实际上,如果你的网络链接可以链接到外网的话,工具仓库git-repo.git是不需要搭建部署的。

只需要通过REPO_URL这个环境变量来指定URL就可以自动拉取git-repo.git仓库。

常用的URL有这些:

但是现实中,很多公司的外网是受限的,无法访问。这个时候就需要考虑搭建自己的工具仓库git-repo.git了。

这个仓库的搭建很简单,就是一个普通的git仓库,但是涉及到GPG签名的问题就比较复杂。这个过程不是本文档的内容,可以搜索互联网上的文档资料。

部署清单仓库的方式,跟普通的git仓库没有什么差别。关键问题在:

  • 清单仓库如何管理多个项目仓库?
  • 如何编写清单文件manifests.xml?

从服务器的角度来看,你的服务器上肯定会管理多个项目仓库(例如qcom8953,qcom8916,mtk6219,mtk2226,rk3399,rk3358等等),那我们管理这些仓库的方式可能有:

  • 整个服务器只建立一份manifests.git仓库,每个仓库下的不同的xml文件管理不同的项目仓库。例如qcom8953.xml,rk3399.xml等。
  • 每个项目仓库建立一个对应的清单仓库,例如manifests-qcom8953.git、manifests-rk3399.git等,其中放置各项目仓库的清单文件xml。

这两种方式都可以,取决于你的代码管理策略。我一般在整个服务器上使用一个manifests.git仓库,通过不同的xml文件来管理所有的项目仓库。服务器端项目仓库的目录结构设计如下:
aosp
├── manifests.git // 清单仓库
│   ├── qcom8953.xml
│   ├── rk3399.xml
│   ├── rk3358.xml
│   └── mtk6226.xml
├── qcom/qcom8953 // 项目仓库
├── rockchip/rk3399 // 项目仓库
├── rockchip/rk3358 // 项目仓库
└── mtk/mtk6226 // 项目仓库

清单仓库本身就是一个普通的git仓库,他也是有分支的。同一个配置文件,例如qcom8953.xml,他也可以切分出不同的分支,来管理不同的项目仓库版本。

清单仓库的分支,跟项目仓库的分支没有直接的关联关系。但是在实践操作中,我们一般会在清单仓库中建立项目仓库对应的分支,方便管理映射。例如qcom8953项目仓库,它有4个分支master、develop、test和release,那么我们的manifests.git也可以建立四个分支,跟项目仓库对应起来。

我这里建立两个分支:master和release。后面会按照这两个分支来操作。

我们先看一下repo init命令的常用参数:

一般来说,-b的默认值是master,-m的默认值是manifests.xml。如果我们想要使用不同的默认的清单文件,就需要在编写服务端清单文件和repo init参数时需要配合使用。

我这里全部使用默认值。在aosp源码的mannifests.xml中则体现在这几个项上:

编写清单文件,肯定不可能全部手写,需要拿到一份原始的manifests.xml文件。这份文件需要你从你的源头代码repo仓库中获取是最好的。

我这里就以qcom的AOSP源码为例,修改出我自己的仓库qcom8953.xml。

创建清单仓库可以有两种方式:

  • gerrit系统的web页面创建。这种方式适合创建少量的仓库,简单快捷。
  • gerrit命令创建。这种方式适合批量创建大量的仓库,特别是AOSP仓库。

第一种方式比较简单,在WEB页面上操作就可以,没有什么特别的。

重点介绍第二种命令行方式。

创建完毕,在gerrit页面上也可以看到这个manifests.git仓库。管理员可以在页面上创建两个分支:master,release。

客户端按照正常的git操作操作:

这样我们就建立了一个manifests.git仓库,并上传了一个清单文件qcom8953.xml。

下一步就是如何创建项目仓库了。

初始工程仓库的源代码,最好来自平台厂商提供的带了.repo和.git的完整repo仓库,然后我们看看如何将这个仓库移植到我们自己的内部仓库。

一般的操作步骤:

  • gerrit命令批量创建服务端空仓库。
  • 预处理本地repo仓库。
  • 批量上传源代码。

批量创建子仓库只能通过gerrit命令行来进行。

这里我们需要知道的qcom8953仓库的所有仓库名字,然后通过脚本来批量创建,有两种方式:

  • 从xml脚本中提取仓库名称。
  • 从原始源代码仓库的.repo/manifets.git中的project.list文件中直接获取。
    不管哪种方式,都需要人工核对一下最终的仓库数量和名称是一致的。

我们最终需要一个仓库列表文件:project.list。文件内容如下:

接下来我们可以使用下列命令来批量创建服务端空仓库:

创建完毕,在gerrit页面上就看到了几百个git仓库。

在上传本地repo仓库之前,需要做几个预处理动作:

  • 删除本地工程中的.repo目录。
  • 核对本地仓库.repo/manifests.git/xxxx.xml清单文件,根据文件内容删除掉本地代码中的copyfile和linkfile的源。
  • 修改本地每个仓库的git remote url路径。这里你需要自己编写脚本来批量完成。

仓库预处理完毕,你需要一一上传各仓库的指定的分支和代码到服务器仓库。
这里是通用的操作, 你也需要自己编写脚本进行上传同步:

当然,上传之后,你最好在第三方测试验证一下,是不是有些.gitignore或者某些嵌套仓库存在问题,需要手工进行修复。

repo仓库搭建完毕,对客户端来说,使用操作并不麻烦,使用常用的repo命令和git命令即可完成代码提交。

单个仓库的代码提交合并:

    以上就是本篇文章【教你如何搭建android源代码repo仓库】的全部内容了,欢迎阅览 ! 文章地址:http://nhjcxspj.xhstdz.com/xwnews/622.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 物流园资讯移动站 http://nhjcxspj.xhstdz.com/mobile/ , 查看更多   
最新文章
16个ChatGPT用例:利用AI提高团队生产力
Lark是飞书面向海外市场运营的品牌名称。Lark Base对应的中文产品名称为飞书多维表格Lark Meegle对应的中文产品名称为飞书项目La
如何做高质量外链 网站的高质量外链优化策略分析
  虽然搜索引擎算法一直在变,但高质量外链一直是网站排名的重要因素之一。SEO人员每天除了更新文章,剩下的主要工作就是到高
下一个前沿:数据科学和人工智能将如何塑造2025年
本文来自千家网。数据科学作为数字时代的核心驱动力,正在不断推动各行各业的深刻变革。从精准的市场预测到个性化医疗,从智慧城
天津网站SEO找行者SEO,提升品牌知名度的利器,天津网站SEO,提升品牌知名度的有效工具
在当前竞争激烈的互联网市场中,企业要想脱颖而出,就必须利用好各种营销手段,搜索引擎优化(Search Engine Optimization,简称
java enterprise和maven项目有什么区别 eclipse project和maven project
前面我们已完成了Maven安装与配置、Jdk安装与配置接下来在Eclipse中实际创建Maven类型Project一、Eclipse中”File“--》”new“
机电一体化论文
  摘要:全球经济不断的发展,科技也在不断的进步,为了减少资源压力,机电一体化技术在工程机械中的应用越来越多,已然成为了
揭秘SEO网络优化平台,企业网站搜索引擎排名提升秘籍
SEO网络优化平台是提升企业网站搜索引擎排名的关键工具。通过深度分析、关键词优化、内容质量提升等策略,该平台助力企业快速提
搜索引擎优化(SEO)优惠,提升网站排名与流量的(黑帽seo)机会
在当今数字化时代,企业和网站所有者越来越意识到搜索引擎优化(SEO)的重要性,SEO 是通过优化网站内容和结构,提高其在搜索引
5个好用的WordPress seo插件!
WordPress经常被用来搭建外贸英文网站,因为他的拓展性能非常强,通过各种插件来拓展各种功能,非常强大,而且WordPress非常适合
MNN推理引擎:轻量级深度学习优化实践
随着手机算力的不断提升,以及深度学习的快速发展,特别是小网络模型不断成熟,原本在云端执行的推理预测就可以转移到端上来做。
相关文章