Android下的配置管理之道之高通拆仓

本文详细介绍了在Android系统中,针对高通芯片平台代码管理的痛点,特别是针对amss部分的大型仓库拆库的过程。通过拆库,可以优化代码结构,便于维护和提交历史管理。文章列举了拆库的具体步骤,包括使用git subtree命令,以及如何处理about.html和contents.xml等重要文件。此外,还提到了一种自动化拆库的Python脚本方案,用于在Jenkins上执行。
摘要由CSDN通过智能技术生成

Android下的配置管理之道之高通拆仓

高通芯片平台的代码,一般可以分为android部分和amss部分。
android部分很简单就谷歌那一整套的代码的。
amss部分的代码属于高通自己的代码,算是私有代码。 不过这一部分代码仓库组织的很烂很烂。

amss这一部分 高通是把好多模块的代码分不同目录存放到一个git仓库里面了。导致这个git仓库十几GB的大小。
这个仓库的垃圾之处还在于有些不该加到git仓库里面的文件都加入了,例如一些编译生成的中间文件,
一些python执行的中间文件,每次编译这些文件都会被重新修改,真的很垃圾!!!shit~~~

再来说这个amss的仓库,如下列出了某个amss仓库的目录结构,基本上一个目录就是一个模块啦。
其中还有2个单独的文件about.html 和 contents.xml,这两个文件还是很重要的,about.html记录
高通每个模块的版本信息的,非常重要的。contents.xml和编译各个模块有关系,也是比较重要的一个文件。
其中还有一个比较特殊的目录LINUX/,这个是高通android侧的私有代码。应该放到android代码目录顶层
下面的vendor/qcom/proprietary目录下的。

鉴于以上种种原因,我们就需要对amss这个大仓库进行拆库操作了。

拆库有利用我们代码结构的整理,提交历史的整理。
每个模块单独一个仓库,研发提交可以不受影响各行其是。


$ tree -L 1 -p  -F                                                                                         
.
├── [-rw-rw-r--]  about.html
├── [drwxrwxr-x]  adsp_proc/
├── [drwxrwxr-x]  aop_proc/
├── [drwxrwxr-x]  boot_images/
├── [drwxrwxr-x]  btfm_proc/
├── [drwxrwxr-x]  cdsp_proc/
├── [drwxrwxr-x]  common/
├── [-rwxrwxr-x]  contents.xml*
├── [drwxrwxr-x]  LINUX/
├── [drwxrwxr-x]  modem_proc/
├── [drwxrwxr-x]  slpi_proc/
├── [drwxrwxr-x]  spss_proc/
├── [drwxrwxr-x]  trustzone_images/
├── [drwxrwxr-x]  venus_proc/
├── [drwxrwxr-x]  wdsp_proc/
├── [drwxrwxr-x]  wigig_proc/
└── [drwxrwxr-x]  wlan_proc/

15 directories, 2 files


通过上面我们基本上知道各个目录是上面了,也就知道该怎么拆库了。
基本上就是上面列出的每个目录拆库为一个小仓库,这些是amss侧各个模块的目录,
LINUX/目录拆库为vendor/qcom/proprietary仓库。

下面给出命令



# 首先我们要下载(下载使用git clone,第一次需要)或更新我们的amss代码,并且检出到对应的分支或者标签上(这里是r00455.2标签)。
cd amss && git fetch --all --tags && git checkout r00455.2

git subtree 命令拆库,在amss仓库顶层目录执行

通过git命令帮助我们能够指定subtree有个split的子命令,split英文意思就是拆分的意思。


       git-subtree - Merge subtrees together and split repository into subtrees


       git subtree add   -P <prefix> <commit>
       git subtree add   -P <prefix> <repository> <ref>
       git subtree pull  -P <prefix> <repository> <ref>
       git subtree push  -P <prefix> <repository> <ref>
       git subtree merge -P <prefix> <commit>
       git subtree split -P <prefix> [OPTIONS] [<commit>]

这里 -P 后面的需要拆库的目录, -b 后面是拆库后把这些代码分支提交存放到哪个分支上。(这个分支要是一个不存在的分支)
这里我们每个模块就取模块名称加上master组成我们的分支名称。



git subtree split -P trustzone_images -b trustzone_images_master

执行完上面的命令后,amss仓库下面就会多一个本地分支 trustzone_images_master 这个分支就包含了
目录 trustzone_images里面的所有代码,已经所有提交历史。

最后我们只需要把这个本地分支推送到gerrit代码服务器上对应的仓库就可以了



git push ssh://gerrit.com:29418/git/android/AMSS/trustzone_images  trustzone_images_master:r00455.2 -f

这里我们amss侧的仓库都放到这样的路径下面 git/android/AMSS/。
推送到上面起个上面分支可以自己决定。一般 高通平台_r00455.2_rebase_日期 这样来命名这个分支。

其他的目录以此类推。

然后在给个 LINUX/ 拆库的命令



git subtree split -P LINUX/android/vendor/qcom/proprietary -b proprietary_master

git push ssh://gerrit.com:29418/git/android/platform/vendor/qcom/proprietary proprietary_master:r00455.2 -f

这里LINUX/ 拆库的目录要到最里面的,不要值到LINUX/这一级别。要到LINUX/android/vendor/qcom/proprietary。
存放到gerrit上的路径也建议是 git/android/platform/vendor/qcom/proprietary。

git/android/ 下面都是我们代码仓库。当然不同公司可能组织代码仓库目录结构不太一样,有的可能开头叫个qcom/ ,或者有些就没有个开头的目录。

还是建议把所有的git仓库分分类,整理干净。

最后这个about.html 和 contents.xml 文件在单独提交一个patch到common仓库下面。

关于proprietary仓库,也可以再进行一次拆库,这个和amss的类似,就是每个子目录分别拆库放到不同的仓库下面。

最后能有个脚本自动,然后最后把拆库后的给个仓库是revision 信息打印一下,然后 组织的manifest也打印一下。



         trustzone_images ['9dc0fd4591ceffce056f38c71d702d80c6c184ab', 'Commit label r00455.2 - Post-CS7 0.0.455.2']
                 aop_proc ['06aaa952c6aa549dcc78874e3a791dc051229181', 'Commit label r00455.2 - Post-CS7 0.0.455.2']
                spss_proc ['fed2fd8a54f97453195032f124835e0a9957b50f', 'Commit label r00446.1 - Post-CS6 0.0.446.1']
               modem_proc ['331caebb7ab6b68f203fcd1633f272c92a436b78', 'Commit label r00455.2.139522.1.139771.3 - Post-CS7 0.0.455.2.139522.1.139771.3']
              boot_images ['ea97b9aaa34c959eaf83e4c74f2bbc231a4e4b6c', 'Commit label r00455.2 - Post-CS7 0.0.455.2']
               venus_proc ['c64930e9346a4de402ec05beb44bef89c0e34b65', 'Commit label r00455.2 - Post-CS7 0.0.455.2']
                   common ['028afc65f556c681cc7b597374065517a3b9632d', 'Commit label r00455.2.139522.1.139771.3 - Post-CS7 0.0.455.2.139522.1.139771.3']
                slpi_proc ['0b8c16d09c40b5593ac7643282f3392ad2d12629', 'Commit label r00455.2 - Post-CS7 0.0.455.2']
                    LINUX ['9ed75e0dc096e7c7935134b9c444233005102e8f', 'Commit label r00455.2.139522.1.139771.3 - Post-CS7 0.0.455.2.139522.1.139771.3']
                adsp_proc ['b2c789928e38fe434f8d9df87806d99d5effe3aa', 'Commit label r00455.2 - Post-CS7 0.0.455.2']
                btfm_proc ['1280aa122fcd766ccf1bbfa1ea7eb1de25a38585', 'Commit label r00455.2 - Post-CS7 0.0.455.2']
                wlan_proc ['674a8a55269bef51abb4e99f5ed3793cc0ca836c', 'Commit label r00455.2.139522.1.139771.3 - Post-CS7 0.0.455.2.139522.1.139771.3']
               wigig_proc ['67dd08d91caad71284c475a53787bb9372e149e5', 'Commit label r004361.1 - Post-CS5 0.0.4361.1']
                wdsp_proc ['775c398d1590cf18605f90e7fba2582743d1d73f', 'Commit label r004361.1 - Post-CS5 0.0.4361.1']
                cdsp_proc ['47870d27ab8d7dff3e5e414cfef45138de2c5021', 'Commit label r00455.2 - Post-CS7 0.0.455.2']

  <project name="AMSS/trustzone_images" path="AMSS/trustzone_images" revision="9dc0fd4591ceffce056f38c71d702d80c6c184ab" />
  <project name="AMSS/aop_proc" path="AMSS/aop_proc" revision="06aaa952c6aa549dcc78874e3a791dc051229181" />
  <project name="AMSS/spss_proc" path="AMSS/spss_proc" revision="fed2fd8a54f97453195032f124835e0a9957b50f" />
  <project name="AMSS/modem_proc" path="AMSS/modem_proc" revision&
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值