关于项目 git 协作流程的思考

在项目开发的过程中,由于有多人参与,每个人的习惯也不尽相同,容易导致很多不可控的问题出现。

业务代码层面,可以通过使用各种 lint 工具来约束编码规范,但是代码提交、发版等等相关的规范化一直没有强力的推动下去。

目前在开发过程中,对于分支的管理,主要参考 git flow 的规范,使用 rb-xxx 分支来作为开发分支,合并到 master 分支后由 jenkins 自动的打 tag,然后触发构建。

前一段时间开始尝试使用 commitizen 来规范化 git 的提交记录,但是仅仅就是提交的时候用一下,并没有和整个项目的管理流程相串联起来,

最近抽空重新梳理学习了一下相关的工具,主要就是:

  • 使用 commitizen 辅助 git 规范化提交
  • 使用 Commitlinthusky 来触发钩子并校验提交是否规范。
  • 使用 standard-version 来自动发版并生成 CHANGELOG.md 文件。

这里有一篇别人写的挺不错的文章:优雅的提交你的 Git Commit Message

具体的某个工具的用法可以直接去 github 上看官方文档。

一、工具介绍

1. commitizen

commitizengit commit 的内容规范了一下,包含了改动的类型、摘要、详细描述、影响的 issue 等等,也为后续自动生成 README.md 文件提供了基础。

本次提交的类型感觉有点不太好区分,比如某行文案更改了,是算作 featfix 还是 refactor 呢?

如果不好权衡选择的话,可以参考下 angular 官方仓库的提交记录:https://github.com/angular/angular/commits/master

image.png

2. commitlint 和 husky

commitlint 可以配合 huskygit commit 之后触发检查,如果不符合要求的话,提交无效。

image.png

3. standard-version

standard-version 是单独用一次 git 提交来修改 CHANGELOG.md 文件并打 tag,但是由于目前团队内的项目采用的是提前确定好下次发布的版本号之后,建立相应的 rb-xxx 分支,然后合入 master 之后,jenkins 自动打 tag ,所以不太适用 standard-version

image.png

使用 git log 查看:

image.png

二、使用方法

1. 配置 commitizen

yarn add -D commitizen cz-conventional-changelog 

package.json 文件中加入:

"scripts": {
    ...,
    "commit": "git-cz",
},
"config": {
    "commitizen": {
        "path": "node_modules/cz-conventional-changelog"
    }
}

2. 配置 commitlint 和 husky

commitlint:

yarn add -D @commitlint/config-conventional @commitlint/cli

在项目目录下创建 .commitlintrc.js 文件并写入:

module.exports = {
  extends: [
    '@commitlint/config-conventional'
  ],
  rules: {
  }
};

husky:

yarn add -D husky

package.json 文件中加入:

"husky": {
    "hooks": {
      ...,
      "commit-msg": "commitlint -e $GIT_PARAMS"
    }
  },

3. 配置 standard-version

yarn add -D standard-version

package.json 文件中加入:

"scirpts": {
    ...,
    "release": "standard-version"
}

二、一点心得

如果要将所有工具都串联起来使用的话,感觉可以尝试还是使用 development 分支作为开发分支,然后日常提交使用 commitizen,某个版本迭代完成之后,将 devlopment 分支合并入 master 分支。

然后由管理员手动执行 standard-version 命令来完成一次 release 的提交并更新 CHANGELOG.md 及打 tag,然后直接 push 到远端 master 分支中,此时 master 分支不再触发正式环境的构建任务,改由 tag 来触发。

或者以上 release 的流程在 dev 分支合并入 master 后,由 jenkinsgitlab ci 来自动完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值