美文网首页
Git规范总览:协作管理、分支流转、提交

Git规范总览:协作管理、分支流转、提交

作者: 科研者 | 来源:发表于2024-09-05 11:13 被阅读0次

目录:

  1. 规范的种类
  2. 仓库层级结构规范
    1. 访问权限
  3. 协作管理规范
  4. 分支流转规范
  5. 分支命名规范
  6. 合并规范
  7. 合并请求规范
  8. 标签命名规范
  9. 提交规范

规范的种类

在大多数人的脑海中 Git规范 = Git Flow 或者 Git规范 = Git Flow + 提交规范
这大概是因为从来没有人系统、深入地理解和总结过 Git 规范相关的所有东西。

为了以后在 Git规范 方面有更清晰的表达,我这里对 Git规范 相关的概念进行重新定义下。

我把 Git 相关的规范分为了以下几类(可能还不全,日后会慢慢完善):

  • 仓库层级结构规范:定义了仓库的分组(层级)结构及访问权限。
  • 协作管理规范:定义了多人协作时的管理策略。
  • 分支流转规范:定义了分支的来源、去向、合并、删除等相关的规则。
  • 合并规范:定义了合并操作的具体规则。
  • 合并请求规范:定义了合并请求的步骤、信息等相关规则。
  • 提交信息内容规范(简称提交规范):定义了提交文件的结构、格式、信息类型等规则。
  • 分支命名规范:定义了分支名字结构、格式等相关规则。
  • 标签命名规范:定义了标签名字和信息结构、格式、信息类型等相关规则。

仓库层级结构规范

详情请看仓库层级结构规范

仓库层级结构图
  • 产品(组):因为产品之间的关联性较强,所以后端仓库不一定是按产品来划分的,但前端大多数是按产品来划分的,所以,针对产品,需要将 前端仓库 和 后端仓库分开;
    • 后端(组)
      • 服务1(仓库)
      • 服务2(仓库)
    • 前端(组)
      • 产品1(仓库)
      • 产品2(仓库)
  • 项目(组):因为项目之间的关联性较弱,往往有各个的前端仓库和后端仓库,所以默认情况可以将前端仓库 和 后端仓库 放在一起;如果某个项目只有前端仓库,没有对应的后端仓库,那就不必为项目创建组。
    • 项目1(组)
      • 前端(仓库)
      • 后端(仓库)
    • 项目2(仓库):由于没有后端,所以 项目2 直接作为前端仓库来创建,不必再创建成组
  • 前端工具库(组):用于存放封装的库、工具等;因为这些工具大部分是通用的,服务于开发人员的,所以本组的默认访问权限可设为 内部 internal,特殊的组或仓库除外;
    • 工具库1(仓库)
    • 工具库2(仓库)
  • 后端工具库(组):用于存放封装的库、工具等;因为这些工具大部分是通用的,服务于开发人员的,所以本组的默认访问权限可设为 内部 internal,特殊的组或仓库除外;
    • 工具库1(仓库)
    • 工具库2(仓库)
  • 运维(组):存放一些基础设施的项目,比如:监控系统、日志系统、脚本架工具、运维脚本等。
    • 工具1(组)
      • 前端(仓库)
      • 后端(仓库)
    • 工具2(仓库):单独的工具,不分前后端,如:脚本等;
仓库目录结构图

访问权限

一般情况,仓库或组的公开性有以下几种

  • 私有 private:只有仓库或组的成员才可以访问;
  • 内部 internal:只有内部用户(登录的用户)才能访问;
  • 公共 public:公开的,所以有人员(登录的 和 未登录的)都可以访问;
  • 所有的顶层组:均为内部可见,这样可以让大家知道都有哪些分类,以至于在创建项目或组时在地方可以创建;
  • 对于顶层组内部的组或仓库:
    • 工具库内部的组或仓库(内部 internal):包括前端工具库 和 后端工具库
      • 因为这些工具大部分是通用的,服务于开发人员的,所以本组内部的组或仓库的默认访问权限可设为 内部 internal,特殊的组或仓库除外;
      • 如果因些工具库的源码不方便暴露,但文档需要大家都能访问,可将其文档单独存放在一个仓库中,分别为源码 和 文档设置不同的访问权限;
    • 产品、项目内部的组或仓库 (私有 private):由于 产品 和 项目 是公司重要资产,并且只需要相关人员对于源码了解,所以这些组内部的组或仓库的默认访问权限应设置为 私有 private
    • 运维内部的组或仓库(私有 private):运维相关的工具通常只有运维人员来维护,所以此组内部的组或仓库的默认访问权限应设为 私有 private

一般情况下,仓库或组的成员角色有以下几种:

  • 管理员:拥有仓库完整的权限
  • 开发者:拥有提前、推送、拉取代码的权限
  • 浏览者:只能查看仓库,不能提交、推送仓库;
  • 对于公司的职员:
    • 前端负责人拥有所有前端仓库的访问权限;
    • 后端负责人拥有所有后端仓库的访问权限;
    • 开发人员只有其所负责项目的开发者角色;
    • 项目负责人拥有其所负责项目的管理员角色;

协作管理规范

我在 Git协作管理方案 中介绍多种 Git协作管理方案,不同方案有不同的适用场景,具体使用哪种方案,因项目和团队结构而定,但对于大多数小中型项目和团队而言,都比较适用下面2种方案:

如果这两种方案不太理想,您可以在 Git协作管理方案 这篇文章中找到你想要的答案。

Git协作管理方案 这篇文章中讲的比较抽象和通用,下面就针对 使用分支管理环境 且 支持合并请求 的项目仓库 来具化地描述下 开测预发协作管理方案稳妥型开测预发协作管理方案 的协作流程:

约定下各角色所管理的分支:

  • 开发组长:开发分支
  • 测试者:测试分支
  • 预发布者:预发布分支
  • 发布者:发布分支

当需要往这些分支上合并代码时,都需要通过 合并请求 向对应的分支负责人申请。

因为 稳妥型开测预发协作管理方案 只是在 开测预发协作管理方案 的协作流程 上平加了 第6条,这是为了确保 开发分支 上包含了 发布分支 的全部代码,所以可以将 开测预发协作管理方案稳妥型开测预发协作管理方案 的协作流程统一描述,如下:

协作流程:

  1. 开发者基于 开发分支 创建 功能分支
  2. 向开发组长发起 合并请求,并在标题上添加前缀 WIP 标识;
  3. 开发者在 功能分支 上做开发;
  4. 开发组长审查代码,对有问题的地方进行批注,并要求开发者改正;
  5. 当开发完毕后,相关人员在 功能分支 上进行验收;
  6. 验收通过后,把 开发分支 上最新的变更合并进来;
  7. 开发者自测;
  8. 自测试没问题后,去除合并请求的WIP前缀,并通知开发组长处理请求;
  9. 👉(稳妥型方案特有的步骤)开发组长将 发布分支 上的新变更 合并到 开发分支上
  10. 开发组长确定没问题后,同意 合并请求,并执行合并操作;
  11. 开发组长向测试者发起 合并请求;
  12. 测试者同意请求并执行合并操作;
  13. 测试者进行测试;
  14. 测试者测试通过后,向 预发布者 发起 合并请求;
  15. 预发布者接受请求并执行合并操作;
  16. 预发布者在预发布环境测试;
  17. 预发布环境测试通过后,预发布者向 发布者 发起 合并请求;
  18. 发布者接受请求并执行合并操作;
开测预发协作步骤-简化版

分支流转规范

目前有以下几种分支流转规范(关于前三者之间的区别,可看 Git 工作流程 这篇文章):

  • Git Flow:适合基于 版本发布 的项目,即:需要一段时间以后才会产出一个新版本的项目。
  • GitHub Flow:适合 持续发布 的项目。
  • GitLab Flow:持续发布 和 版本发布 的项目都适合,且支持多种环境。
  • Git并行工作流程规范: 适合经常有很多并行功能开发的项目。

个人比较推荐 GitLab FlowGit并行工作流程规范

分支命名规范

  • 使用 / 作为分隔符来表达层次关系;如 模块/功能
    • 相比 中划线 -、下划线 _ 等其它的分隔符来说,/ 具有如下优势:
      • 与路径分隔符一致,从形式上更能表达出层级结构。
      • 很多 git 工具会将 / 解析分隔符并将分支名作为路径来解析,然后以文件树的形式展示分支,这样可以更好的组织分支。
  • 名称中应避免冗余信息;如 模块A/模块A_功能A 中的 模块A_功能A 中的 模块A 就是冗余信息。

合并规范

  • 开发分支只能合并当前迭代版本的功能;

合并请求规范

  • 对于需要代码审查的分支,如果其直接下游分支是明确的,则该分支到直接下游分支的合并请求可以提前创建(比如在创建该分支时就创建到直接下游分支的合并请求),但此时合并请求的标题上应加上前缀 WIP (Work in progress 之意)标识,来表示该分支仍在开发中,当前状态不可合并;在真正开完成时,再移除前缀 WIP 标识,以表示当前分支处于可合并的状态;这样设计的目的是:
    • 可让合并请求的处理人员提前知道将来都有哪些分支需要合并;
    • 合并请求的相关处理人员也可以提前做一些工作,比如:代码审查 等,而不用等到开完成时统一检查;在开发完成时再审查,往往审查的代码量太多,导致审查不完成 或 不仔细;
    • 分支开发人员 和 合并请求处理人员可以在分支的开发期间连续互动(通过评审、审查等),以便及时发现问题、改正问题;
  • 测试分支预发布分支发布分支 发起的合并请求中一定要指定 里程碑标签
  • 对于修复分支,一定要等到修复分支到母分支的合并请求合并完成之后,再继续执行合并到开发分支的后续操作,否则容易造成将开发分支上的代码合并到修复分支的母分支上;
  • 合并请求合并完成后,要及时删除源分支;

标签命名规范

采用 语义化版本 规范来命名标签。标签的格式为:

<主版本号>.<次版本号>.<修订号>[.<测试版本号>]
  • 主版本号:当你做了不兼容的 API 修改,
  • 次版本号:当你做了向下兼容的功能性新增,
  • 修订号:当你做了向下兼容的问题修正。
  • 测试版本号: 当需要标明测试版本时可以在后面追加测试版本号,测试版本号可以使用测试轮数来指代。
  • 先行版本号及版本编译信息可以加到 <主版本号>.<次版本号>.<修订号> 的后面,作为延伸。

提交规范

详见 提交规范

相关文章

  • Git的分支命名

    主要规范两点: git 分支命名规范 git提交记录规范 一. git 分支命名规范 git分支分为集成分支、功能...

  • git分支命名规范

    git 分支命名规范 git 分支命名规范 为规范开发,保持代码提交记录以及 git 分支结构清晰,方便后续维护,...

  • 开发必备GIT手册

    什么是GIT 版本管理 分支管理 代码审查 同步协作 GIT基本操作 项目初始化 项目签名 暂存标记 提交暂存 版...

  • Git 分支命名规范

    Git 分支命名规范 为规范开发,保持代码提交记录以及 git 分支结构清晰,方便后续维护,现规范 git 的相关...

  • git常用命令

    一、本地分支 二、远程分支 三、git提交规范

  • GIT 规范

    git 规范 git 规范一般包括两点:分支管理规范和 git commit 规范。 分支管理规范 一个项目可以创...

  • Java开发必备 Git 分支开发:规范指南及完全学会Git的2

    Git 是目前最流行的源代码管理工具。为规范开发,保持代码提交记录以及 git 分支结构清晰,方便后续维护,现规范...

  • 团队代码协作规范 及 产品发布流程

    团队代码协作规范 - 基于git flow工作流 分支解释: master :不允许开发者对代码进行修改和提交。该...

  • 规范

    1 工作流规范 1.1 git规范 1.1.1 分支管理规范 git版本管理中主要有以下几种类型的分支:maste...

  • git分支管理与使用规范

    git分支管理与使用规范 分支管理 flow git flow github flow gitlab flow f...

网友评论

      本文标题:Git规范总览:协作管理、分支流转、提交

      本文链接:https://www.haomeiwen.com/subject/zwirljtx.html