默认文件1607784886203.png

从最早使用git起,就隐隐约约摸索了一套git开发规范,这里做个小总结。这篇文章尽量通俗些。

初版: 2020-12-12 22:45:19

缘起

从最早使用 git起,就隐隐约约摸索了一套基于git的开发规范,比如

  • 默认的master不允许随便动,设定保护分支
  • 先建立分支,比如feature前缀的分支用来开发功能,开发完合并到master
  • 达成一个阶段设定tag,标记版本
  • 紧急的bug不能排期的,设定为hotfix,开发完合并到一个基础分支,测试通过后进入master
  • 等等

这是最早的约定,后来发现大家的规范殊途同归,今天看了下系统的 git 规范,原来这里面有系统的学问。

分支管理规范

系统来说,git 开发规范或者说分支管理规范大致有三种:

  • github flow
  • git flow
  • gitlab flow

Github flow

核心思路:

  • master 作为保护分支始终核心可用
  • 提交代码鼓励频繁颗粒度提交代码
  • 开启pr,此外有讨论、codeReview 等
  • 最终合并到 master

更多的是思路。目前就理解到这里,具体的可以自行查阅

Git flow

安装一个插件可以启用。使用 git flow init 可以开启。需要单独安装可参考 图解git flow开发流程

原来我司已经在做这个了,只不过 support 没使用。看下图:
image.png
补充:version tag prefix 可以加个 v

核心思想是:

  • master用来稳定部署,当前稳定版
  • develop 是最新代码,下一代的版本
  • feature 功能开发分支,开发完合并develop后删除
  • release 基于 dev的特定版本存档,合并到master后删除
  • hotfix 解决问题

这个插件封装了一些命令大致如下:

  1. # 开启分支
  2. git flow feature start xxx
  3. # 提交完 会合并到dev
  4. git flow feature finish xxx
  5. # 那就发布release
  6. git flow release start 1.0.1

细节不放了,可看上面的第三方链接。

Gitlab flow

刚才提到的两种方案:

  • git flow 比较复杂,分支很多,管理起来麻烦
  • github flow 做了整合。但和issue管理麻烦

因此这个的核心思想是:

  • 取消dev分支,采用基于 master进行签出和合并的策略
  • 同时把issue和feature紧密相连。

一般的实践是:

  • 分三个 master pre-prod prod。
  • 开发新功能或者新需求,先建立issue,然后从master拉分支 issueID-name,也就是相当于feature,好处是开发完对应的issue会自动关闭
  • 必须使用 rebase来合并commit记录,然后push
  • 然后master依次发起合并。

没啥好说的,个人倾向于使用 git flow

结束

简单做个调研