Gitlab + Android AOSP Code with REPO

最近工作需要,使用新的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中创建的一致

猜你喜欢

转载自www.cnblogs.com/yuxuan-sh/p/9238160.html