最近工作需要,使用新的CPU,下载厂家 Android code,然后发现厂家采用repo管理,而不象以前的厂家,直接爆力的使用 git管理整个项目. 顺便研究了下,由于我们管理代码采用 Gitlab,然后想着怎么在gitlab 上面使得repo.
我们本地有做 Android AOSP Mirror.所以考虑用repo把本地镜导入 gitlab
其实 Gitlab 本身是支持repo,因为repo只是对git command的再次封装,是个脚本.
但由于一个android项目动则几十个项目,要自己一个一个添加(什么,我眼神好,我动手能力强,我就喜欢一个一个添加,好吧,被你打败了,你可以不用看了)
下面介绍自动创建项目方法.(http://www.example.com 表示你的gitlab的访问位置)
1. 需要安装 python,我安装的是 2.7.5
2. 需要使用 gitlab的API (http://python-gitlab.readthedocs.io/en/stable/install.html)
3. 创建脚本需要的 token (http_key)
http://www.example.com/profile/personal_access_tokens
4. 写python脚本.在Gitlab里面自动创建 AOSP里面对应的 git项目
import gitlab
gl = gitlab.Gitlab(http://www.example.com, private_token=http_key, api_version=4)
如何创建 group
group = gl.groups.create({'name': group_object[1],'path': group_object[1],'parent_id':parent_id})
id = group.get_id() #获取新创建group 的ID,下面需要在此group下面创建项目时,需要用到这个ID
如何在指定的 group下面创建 project
重点来了,圈起来,要考试的,创建项目的时候, path 属性必须要指定,不然会很惨.不信者自己去踩坑
gl.projects.create({'name': project_name,'path': project_name,'namespace_id': id})
知道以上两方法后,使用 python脚本遍历 AOSP整个目录,就可以把所有的 android项目添加到gitlab里面,并 且还按照 aosp的目录架构.
5.创建脚本让aosp项目真正可以用gitlab下载代码的方式下载
A. 用脚本把 aosp里面的所有git项目push到gitlab里面. 此方法在每次 aosp更新后,都需要执行脚本把aosp推送到gitlab,同时会占用大量的空间.一个 android aosp 差不多200G吧.
B. 把gitlab 里面实际存放项目的位置删掉,创建软链接到aosp对应的项目.git
此方法好处是,只需要更新 aosp mirror就好,同时减少磁盘空间使用.
以上处理后你就可以使用类似如下命令下载代码了,注意 –repo-url 指定到本地,所以是不会连接到 google服务器
"repo init [email protected]:/aosp/mirror/git-repo.git -u git@www.example.com:aosp/mirror/platform/manifests.git –b android-8.1.0_r33"
脚本都比较简单,gitlab API使用是关键,我就不提供完整的脚本
这里还是要吐槽下 GITLAB API gl.projects.create 需要指定group id,不然会直接创建到根目录下面
项目里面 group是很重要,居然创建项目的时候,不可以用字符串指定group位置,非得搞什么ID,搞 什么飞机嘛,用API获取指定group的ID那么麻烦
问题.
platform/build.git 与 platform/build/soong.git 脚本创建到这里会出错,因为 gitlab 规定 group名字和project名字在同一级下面,不可以同名. 所以脚本需要对这些 做特殊处理.
特殊的项目有如下.
'platform/build.git',
'platform/external/chromium_org/third_party/skia.git',
'platform/external/chromium_org.git',
'platform/external/python.git',
'platform/hardware/bsp/kernel/freescale.git',
'platform/hardware/bsp/kernel/intel.git',
'platform/hardware/bsp/kernel/qcom.git',
'platform/hardware/google.git',
'platform/prebuilts/python/darwin-x86.git',
'platform/prebuilts/python/linux-x86.git',
'platform/tools/tradefederation.git'
如果你的项目中有使用到如上项目的话,那么请修改 xml文件中对应项目的名字与你gitlab中创建的一致