点击上方“小黄鸭编程社区”,选择“星标”

作者:人人贷大前端技术中心来源:https://urlify.cn/3a6NNb

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标准(约定式提交标准)。基于不同需求,也可以使用不同适配器。

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

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

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

2、项目内安装commitlint & husky

commitlint负责用于对commit message进行格式校验,husky负责提供更易用的git hook。

use npm

npm i -D husky @commitlint/config-conventional @commitlint/cli

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

生成的commit message格式如下:

(): 

填写完毕后,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暂不使用。

# 主要typefeat:     增加新功能fix:      修复bug# 特殊typedocs:     只改动了文档相关的内容style:    不影响代码含义的改动,例如去掉空格、改变缩进、增删分号build:    构造工具的或者外部依赖的改动,例如webpack,npmrefactor: 代码重构时使用revert:   执行git revert打印的message# 暂不使用typetest:     添加测试或者修改现有测试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_IDfix #JIRA_ID

# 示例

完整的commit message示例

相应的git log

# 扩展阅读

conventional commits 必读 介绍约定式提交标准。

Angular规范 必读 介绍Angular标准每个部分该写什么、该怎么写。

@commitlint/config-conventional 必读 介绍commitlint的校验规则config-conventional,以及一些常见passes/fails情况。

- END -

# 热文推荐

为什么在密码问题上,char[]优先于String?

阿里的离职率真的是互联网大厂里最低的吗?

35岁腾讯员工被裁员感叹:北京一套房,存款700多万,失业好焦虑

在看 

eclipse git提交代码_来看看大厂的Git提交规范,千万别乱提交代码哦...相关推荐

  1. idea提交git差件_多人合作使用git,推送代码、和并分支

    原文地址: 多人合作使用git,推送代码.和并分支 ​www.limuke.top 下面将会演示多人合作写项目使用git的教程:创建分支.推送代码.将自己的分支的代码和主分支合并. 下面是模仿两个人合 ...

  2. lstm代码_贼好理解,这个项目教你如何用百行代码搞定各类NLP模型

    机器之心报道 参与:思源.贾伟 NLP 的研究,从词嵌入到 CNN,再到 RNN,再到 Attention,以及现在正红火的 Transformer,模型已有很多,代码库也成千上万.对于初学者如何把握 ...

  3. python分析人口出生率代码_身份证号码各位数字的含义以及计算校验位的python代码...

    公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 其中前六位是地址码,通过百度百科我们很容易就 ...

  4. git 初始化git存储库_什么不保存到Git存储库中

    git 初始化git存储库 You should not commit these four types of files into your Git repository. 您不应将这四种类型的文件 ...

  5. 入职开发很少写代码_如何简化开发人员入职:将开发环境作为代码

    入职开发很少写代码 Imagine that only a decade ago system administrators deployed, configured, and maintained ...

  6. git安装步骤_详解linux安装git的方法步骤(超实用)

    简介 Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linu ...

  7. y空间兑换代码_进行图像增广的15+种功能总结和Python代码实现

    python代码可以自己扩充图像数据集. ​ 无论我们喜欢Keras还是Pytorch,我们都可以使用丰富的资料库来有效地增广我们的图像. 但是如果遇到特殊情况: 我们的数据集结构复杂(例如3个输入图 ...

  8. 查看exe代码_【安全风险通告】Windows Type 1字体解析远程代码执行漏洞安全风险通告...

    微软官方今天发布了编号为ADV200006的安全通告,其中包含两枚Adobe字体管理库相关的严重远程代码执行漏洞,其中一枚漏洞为奇安信代码安全实验室提交,公告中指出这两枚漏洞已遭在野利用. 鉴于漏洞危 ...

  9. lsd 特征点匹配代码_线特征LSD and 描述子LBD(一)(示例代码)

    最近在看有关特征提取的线特征,暑期就看了相关的论文:<基于点线综合特征的双目视觉SLAM方法_谢晓佳>,最近呢,把里面有关线特征提取LSD和描述子LBD的代码跑了一遍,记录如下: [1]L ...

最新文章

  1. 通过实例学习如何使用telerik:RadListView控件
  2. 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式
  3. python debug【】
  4. fieldset 在td中怎样设置高度_TD-LOFT夹层,是如何做到超薄的?
  5. webpack最简单的入门教程里bundle.js之运行单步调试的原理解析
  6. count 数字计数(bzoj 1833)
  7. php如何打开数据库,php数据库怎么打开
  8. 团队作业—预则立他山之石
  9. 批量修改栏目名_Endnote中英文混排批量修改小技巧
  10. 单CPU处理1s视频仅需37ms、GPU仅需10ms,谷歌提出TVN视频架构
  11. mysql的binlog意义_带你解析MySQL binlog
  12. 第一章 SQL命令 ALTER TABLE(一)
  13. 3V升压5V芯片,3V升压5V电路图
  14. vbs整人代码大集合 多年的代码收集
  15. Bugzilla的安装和配置
  16. worldpress小工具自定义html,教程 | 用 worldpress 搭建自己的博客 – 小白教程
  17. (转)日本語を輸入について
  18. 2018年上半年综合素质作文
  19. 自学计算机图形学OpenGL(五)DDA数值微分线段法
  20. 有什么好用的测量仪器尺子?手机也能其妙满足

热门文章

  1. 微前端概述(Micro Frontends) 以及相比单体应用,微前端能带来什么好处
  2. SAP CRM Fiori 应用的 offline 离线支持开发笔记
  3. TypeScript输入参数的默认值一例,以及对应生成的JavaScript代码分析
  4. rxjs里scan operators的用法
  5. SAP Spartacus routing parameter mapping介绍
  6. SAP UI5 Web Component里如何自定义CSS style
  7. UI5_INFO_FETCH_FROM_DB
  8. SAP UI5 attachment control relative url binding
  9. windows环境里React-Native运行失败的原因之一,缺少依赖
  10. VError - Found 0 matching services的根源分析