点击下方公众号「关注」和「星标」

回复“1024”获取独家整理的学习资料!

git是现在市面上最流行的版本控制工具(图文详解 Git 工作原理),书写良好的commit message能大大提高代码维护的效率。但是在日常开发中由于缺少对于commit message的约束,导致填写内容随意、质量参差不齐,可读性低亦难以维护。在项目中引入commit message规范已是迫在眉睫。

用什么规范?

现在市面上比较流行的方案是约定式提交规范(Conventional Commits),它受到了Angular提交准则的启发,并在很大程度上以其为依据。约定式提交规范是一种基于提交消息的轻量级约定。它提供了一组用于创建清晰的提交历史的简单规则;这使得编写基于规范的自动化工具变得更容易。这个约定与SemVer相吻合,在提交信息中描述新特性、bug 修复和破坏性变更。它的 message 格式如下:

<类型>[可选的作用域]: <描述>[可选的正文][可选的脚注]

Quick Start

1.全局安装commitizen & cz-conventional-changelog

commitizen是一个撰写合格commit message的工具,用于代替git commit 指令,而cz-conventional-changelog适配器提供conventional-changelog标准(约定式提交标准)。基于不同需求,也可以使用不同适配器。全网最全的 Git 分支开发规范手册

npm install -g commitizen cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc

安装完毕后,可直接使用git cz来取代git commit。

全局模式下,需要 ~/.czrc 配置文件, 为commitizen指定Adapter。

2.项目内安装commitlint & husky

commitlint负责用于对commit message进行格式校验,husky负责提供更易用的git hook。万字详解!Git 入门最佳实践

Use npm
npm i -D husky @commitlint/config-conventional @commitlint/cliUse yarn
yarn add husky @commitlint/config-conventional @commitlint/cli -D

commitlint只能做格式规范,无法触及内容。对于内容质量的把控只能靠我们自己。

3. 添加相应配置

创建commitlint.config.js

# In the same path as package.jsonecho 'module.exports = {extends: ["@commitlint/config-conventional"]};' > ./commitlint.config.js引入husky# package.json...,
"husky": {"hooks": {"commit-msg": "commitlint -e $GIT_PARAMS"}
}
4. 使用

执行git cz进入interactive模式,根据提示依次填写

1.Select the type of change that you're committing 选择改动类型 (<type>)2.What is the scope of this change (e.g. component or file name)? 填写改动范围 (<scope>)3.Write a short, imperative tense description of the change: 写一个精简的描述 (<subject>)4.Provide a longer description of the change: (press enter to skip) 对于改动写一段长描述 (<body>)5.Are there any breaking changes? (y/n) 是破坏性修改吗?默认n (<footer>)6.Does this change affect any openreve issues? (y/n) 改动修复了哪个问题?默认n (<footer>)

生成的commit message格式如下:

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

填写完毕后,husky会调用commitlint对message进行格式校验,默认规定type及subject为必填项。

任何git commit指令的option都能用在 git cz指令上, 例如git cz -a

Commit message规范在rrd-fe落地使用情况

针对团队目前使用的情况,我们讨论后拟定了commit message每一部分的填写规则。

1. type

type为必填项,用于指定commit的类型,约定了feat、fix两个主要type,以及docs、style、build、refactor、revert五个特殊type,其余type暂不使用。

# 主要type
feat:     增加新功能
fix:      修复bug# 特殊type
docs:     只改动了文档相关的内容
style:    不影响代码含义的改动,例如去掉空格、改变缩进、增删分号
build:    构造工具的或者外部依赖的改动,例如webpack,npm
refactor: 代码重构时使用
revert:   执行git revert打印的message# 暂不使用type
test:     添加测试或者修改现有测试
perf:     提高性能的改动
ci:       与CI(持续集成服务)有关的改动
chore:    不修改src或者test的其余修改,例如构建过程或辅助工具的变动

当一次改动包括主要type与特殊type时,统一采用主要type。

2. scope

scope也为必填项,用于描述改动的范围,格式为项目名/模块名,例如:node-pc/common rrd-h5/activity,而we-sdk不需指定模块名。如果一次commit修改多个模块,建议拆分成多次commit,以便更好追踪和维护。

3. body

body填写详细描述,主要描述改动之前的情况及修改动机,对于小的修改不作要求,但是重大需求、更新等必须添加body来作说明。

4. break changes

break changes指明是否产生了破坏性修改,涉及break changes的改动必须指明该项,类似版本升级、接口参数减少、接口删除、迁移等。

5. affect issues

affect issues指明是否影响了某个问题。例如我们使用jira时,我们在commit message中可以填写其影响的JIRA_ID,若要开启该功能需要先打通jira与gitlab。参考文档:docs.gitlab.com/ee/user/pro…

填写方式例如:

re #JIRA_ID
fix #JIRA_ID

示例

  • 完整的commit message示例

  • 相应的git log

如果你喜欢这篇文章,希望能动动小手点个在看与转发支持一波。

人人贷大前端技术中心

juejin.im/post/5d0b3f8c6fb9a07ec07fc5d0

推荐阅读 点击标题可跳转

超牛逼!这款轻量级性能监控系统真强大~

从 0 到 1 手把手教你制作酷炫可视化大屏

超详细!K8s 面试题总结

这篇 ElasticSearch 详细使用教程,内部分享时被老大表扬了

MySQL 8.0 的 5 个新特性,太实用了!

软件系统高可用架构思考

这一份最全的TCP总结,请务必收下

API 快速开发平台设计思考

求求你了!别瞎提交代码了,看人家 Git 提交规范那叫一个舒服!相关推荐

  1. git创建仓库,并提交代码(第一次创建并提交)(转)

    一直想学GIT,一直不曾学会.主要是GUI界面的很少,命令行大多记不住.今天尝试提交代码,按GIT上给的方法,没料到既然提交成功了. 于是把它记下来,方便以后学习. 代码是学习用的,没多大意义: 下图 ...

  2. git创建仓库,并提交代码(第一次创建并提交)

    一直想学GIT,一直不曾学会.主要是GUI界面的很少,命令行大多记不住.今天尝试提交代码,按GIT上给的方法,没料到既然提交成功了. 于是把它记下来,方便以后学习. 代码是学习用的,没多大意义: 下图 ...

  3. 提交代码遇到 Everything up-to-date 或 提交代码遇到 On branch master Your branch and ‘origin/master‘ have diverg

    提交代码遇到 Everything up-to-date 提交代码遇到『Everything up-to-date』 提交代码遇到 On branch master Your branch and ' ...

  4. github提交代码命令(向开源社区提交代码)

    #若没有添加远程地址,则添加,取名如upgrade git remote add upgrade https://github.com/apache/druid.git 拉取远程最新代码upgrade ...

  5. git 回滚/撤回提交代码、误删、误提交恢复

    git回滚找回代码 上情况 情况1 git pull的时候发生冲突,修改失误,并commit了,怎么恢复? 查看所有的commit提交日志,并获取提交id git log commit 0992046 ...

  6. git 提交代码某个文件夹一直提交不上去

    问题描述: 这个文件夹是直接拷贝过去的,在提交到远程仓库是出现了问题. 问题分析: 直接拷贝过去的文件夹里面有个 .git 的文件,所以在执行 git status 的时候出现 modified: t ...

  7. git idea 修改提交信息_idea中修改git提交代码的用户名和邮箱地址

    Idea中使用git 命令窗口 依次打开idea->file->settings->tools->Terminal 在shell path 选择git安装目录bin中的bash ...

  8. 用Prettier和ESlint来统一提交代码

    2019独角兽企业重金招聘Python工程师标准>>> 为什么使用 很遗憾,JavaScript没有官方的代码风格.业界有一些流行的代码风格,比如Airbnb和Standard.使用 ...

  9. 强强联合!Papers with Code 携手 arXiv,上传论文、提交代码一步到位

    转自 | 机器之心 作者 | 魔王 刚刚,机器学习资源网站 Papers with Code 宣布与论文预印本平台 arXiv 进行合作,论文作者在 arXiv 上上传论文时可以同步上传官方和社区代码 ...

  10. 强强联合!Papers with Code携手arXiv,上传论文、提交代码一步到位

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 刚刚,机器学习资源网站 Papers with Code 宣布与论文预印本平台 arXiv 进 ...

最新文章

  1. 一维二维码的提取、识别和产生
  2. operator new在C++中的各种写法
  3. python进程通信方式有几种_python全栈开发基础【第二十一篇】互斥锁以及进程之间的三种通信方式(IPC)以及生产者个消费者模型...
  4. android 评论的展开功能,Android开发实现ListView点击展开收起效果示例
  5. JAVA JDK windows环境搭建
  6. 用DSA或者RSA进行加密或者数字签名
  7. git pull 提示当前不在某个分支上解决办法
  8. Unrecogized font family ‘Ionicons’ 在ios上报错,android正常
  9. 【MOOC】建筑智能化系统工程(南工职)(1)基础知识
  10. 个人公众号注销方法_微信公众号注销后怎么申请 恢复公众号的方法步骤
  11. 利用INFOPATH2007VS2005开发MOSS工作流详解 --收藏
  12. 美团 java_GitHub - meituan/mssapi_java: 美团云对象存储 Java SDK
  13. teradata查看正在运行的进程_一种基于greenplum数据库的状态检查及性能监控工具.doc...
  14. system函数和signal(SIGCHLD, SIG_DFL)的“固定搭配”
  15. 【功能测试】软件系统测试报告
  16. linux的软件包管理
  17. 倍福NC轴编码器Enc parameters释义
  18. H264编码和M-JPEG、HEVC
  19. 培训计算机安排工作岗位,计算机岗位实习报告
  20. DApp生死局 | 路往何方?

热门文章

  1. 5G NR SSB概述
  2. 入门计算机的粗略学习-Day13
  3. 2022年王道数据结构考研复习指导习题代码(排序)
  4. mysql amoeba 事务_MySQL-Amoeba
  5. Explain执行器名词解释
  6. html定义子菜单初始为隐藏,需要静心学习的PbootCMS模板制作教程(五)
  7. 最难忘的一节计算机课,最让我难忘的一节课作文「共5篇」
  8. pythonpath环境变量pth_.pth 文件扩展python环境路径
  9. 高级程序员与初级程序员差别在哪里?
  10. i7 8700 服务器系统,i7 8700k 云服务器