IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Android组件化治理(二)组件代码管理 -> 正文阅读

[开发工具]Android组件化治理(二)组件代码管理

本文对应的视频版本可以查看我的 bilibili 视频链接 《Android组件化治理(二)组件代码管理》,欢迎如果对您有帮助可以一键三连哦~

Android组件化治理(二)组件的代码管理

背景

随着组件越来越多,组件的代码管理也变得比较麻烦。例如 clone 代码,如果项目有几十上百个组件,我们不可能挨个执行 git clone,这样效率太低了,所以我们需要一套管理组件代码的工具。

AndroidStudio 有了版本管理工具,为什么还需要这个脚本工具?

  • 尽管 AndroidStudio 会自动将项目中的组件纳入版本控制,但是有的时候,这个功能会失效,需要我们手动加入。

  • 执行 CI 或者 Jenkins 任务时,也需要组件管理的脚本工具

  • 一般开发流程有 merge request 流程,开发者需要提 MR 给代码管理者进行 code review,代码没问题才会合并到目标分支的。某一次迭代过程中,开发者需要记住他修改了那些组件,然后对修改的组件分别到 gitlab 后台去提交 merge request,这样一方面效率太低,另一方面犯错,如果开发者漏掉了某个组件,那么代码就会不全。

解决方案

我写了一个统一管理组件的工具:

https://github.com/chiclaim/GitRepos

工具主要特色:

  1. 批量对组件执行 git 命令
  2. 支持任意子目录执行 repos 命令
  3. 执行命令不需要添加 python 前缀
  4. 自动识别修改的组件,创建 merge request

使用步骤

配置环境变量

# 1. clone 脚本
git clone git@github.com:chiclaim/GitRepos.git

# 2. 配置环境变量(MacOS 为例)
open ~/.bash_profile

# 3. 添加如下内容
export REPOS_HOME=你刚刚克隆的脚本地址
export PATH=${PATH}:${REPOS_HOME}

# 终端运行 (或新起一个终端)
source ~/.bash_profile

# 就可以使用 repos 命令
repos --help

# 如果需要使用自动创建 merge request(repos cmr $target_branch)需要设置你的 git-server-url 和 private-token
repos config --git-server-url your_git_server --private-token your_token

新建 module_manifest.json

参考 template_module_manifest.json 文件,创建自己的组件配置文件,如 module_manifest.json

新建的文件,可以存放在你的任意仓库中。

将需要管理的 git 仓库 url 放在 module_manifest.json 中,如:

{
  "modules": [
    {
      "project_id": 0,
      "git": "git@github.com:chiclaim/Repos.git",
      "branch_boss": true,
      "module_name": "Repos"
    },
    {
      "project_id": 0,
      "git": "git@github.com:chiclaim/GitRepos.git",
      "module_name": "Repos1"
    },
    {
      "project_id": 0,
      "git": "git@github.com:chiclaim/GitRepos.git",
      "module_name": "Repos2"
    }
  ]
}

字段说明:

  • project_id: 用于给 gitlab 批量创建 merge request
  • git: 工程的 git url 地址
  • module_name: 工程的名称
  • branch_boss: 必须要存在一个 branch_boss = true 的项目,其他的项目均以该组件的 branch 作为标准,例如 某个组件的 branch_boss=true,其他组件执行 git clone 时都会以该分支为准。

clone 代码

使用 git 时 clone 代码,我们会在目标目录执行 git clone git_url 命令

同理,使用 repos clone 代码,也需要在目标目录执行 repos init $module_manifest_git_url $module_manifest_path

repos 需要所有 git 项目的 json 配置文件,repos init 的第一个参数是配置文件所在的仓库的git url,第二个参数就是配置文件的相对路径(也可以绝对路径)

例如:

repos init git@github.com:chiclaim/GitRepos.git GitRepos/template_module_manifest.json

最后执行

repos sync

repos 会帮你将 module_manifest.json 配置的所有组件,全部 clone 到目标目录(执行 repos init 的目录)

将已经存在的项目交给 repos 管理

如果您的项目已经存在,可以执行如下命令:

repos init-exist GitRepos/template_module_manifest.json

repos init-exist 的第一个参数是组件配置文件的目录

然后可以尝试执行 repos branch,查看当前所有项目的分支情况

命令介绍

repos 和 git 命令一样,你可以在项目目录或任意的子目录执行 repos 命令

  • repos init $module_manifest_git_url $module_manifest_path

    初始化新项目

  • repos init-exist $module_manifest_path

    如果你的工程已经存在,使用 init-exist 初始化

  • repos cfb new_branch_name -p

    统一创建分支(feature)

  • repos sync

    同步所有模块代码

  • repos pull

    对所有模块执行 git pull

  • repos push

    对所有模块执行 git push

  • repos push -u

    如果没有指定跟踪的分支,加上 -u 即可。执行 git push -u remote branch

  • repos checkout your_branch_name

    对所有模块执行 git checkout

  • repos branch

    聚合展示所有模块的当前分支

  • repos merge source_branch

    对所有模块执行 git merge

  • repos -h

    帮助文档

  • repos -c git_command

    对所有模块执行自定义 git 命令,例如: -c git status.

  • repos -d

    删除本地分支

  • repos -r

    删除远程分支

  • repos diff [branch_name]

    分支对比,可以输出你修改了哪些组件

  • repos cmr $target_branch

    source_branch 为当前分支,自动为修改的组件提交 merge request
    $target_branch 目标分支, 一般为 release/develop/master 分支

  • repos config --list

    打印关于 repos 的配置信息

  • repos config --private-token your_token

    设置你的 gitlab token

  • repos config --git-server-url your_git_server

    设置你的 gitlab server

  • repos list

    列出 repos 管理的项目

  • repos update

      列出 repos 管理的项目
    

TODOs

  • 支持通过配置环境变量的方式,全局可以使用 repos 命令
  • 统一删除 feature 分支,避免垃圾分支过多
  • 分组展示当前所有模块的分支详细情况
  • 聚合展示当前所有模块的分支情况,快速查看所有模块是否在统一的分支上
  • 精确展示 status 日志
  • 统一创建 feature 分支
  • pull
  • push
  • 执行自定义 git 命令
  • 删除远程、本地分支
  • 合并分支
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:19:34  更:2022-05-08 08:19:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 15:17:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码