🫡HI大家好:我是子禛。 😊😊😊 在企业团队合作项目中,当项目人员足够多时。我们常常会发现仓库中代码提交的方式千奇百怪,这样会导致如下问题。
- 这样当我们需要对项目进行回滚时,没有办法很好的去确定需要回滚的节点。
- 项目提交信息不规范、不统一,在仓库上看着很难看,不能直接明确要点,无法明确知道仓库代码的变更情况。
那么我们应该如何解决这些问题呢?统一规范
'是关键。
- 公司内部可以通过讨论自定义一个规范。
- 使用现有认知度广泛的规范
首先我们来看看图片
这个是React的GitHub仓库,我们可以看到每个文件、文件夹都有自己的说明。我们可以看到一些关键字如fix
、build
等关键词。他们到底是什么意思呢?下面我们来学习Angular规范
#Angular规范
Angular规范是,angularJS开发组定义的一套关于git代码提交规范,目的是为了增加git仓库的代码可维护性,以及美观度。
结构
Angular提交规范的格式包括Header
、Body
和Footer
三个内容。Header
为必填项,Body
与Footer
为可缺省项,这些内容通过以下结构组成一个完整的提交格式。
<type>(<scope>): <subject>
# 空一行
<body>
# 空一行
<footer>
Header
该部分仅书写一行,包括三个字段,分别是type
、scope
和subject
。
- type:用于说明
commit
的提交类型,必选 - scope:用于说明
commit
的影响范围,可选 - subject:用于说明
commit
的细节描述,可选
type
type
用于说明commit
的提交类型,包括以下选项,相信这些选项已满足日常大部分
的应用场景。
- 如果没有工程化需求的可以记忆一些常用的。
- 对于有工程化要求的,当然这些选项无需刻意记忆,我会引入命令自动完成这些提交工作。
类型 | 功能 | 描述 |
---|---|---|
feat | 新增功能 | 迭代项目需求 |
fix | 修复缺陷 | 修复上一版本存在问题 |
docs | 样式 | 不影响代码逻辑 |
style | 修复缺陷 | 修复上一版本存在问题 |
refactor | 重构代码 | 非新增功能也非修复缺陷 |
perf | 优化性能 | 提高代码执行性能 |
test | 新增测试 | 追加测试用例验证代码 |
build | 更新构建 | 改动构建工具或外部依赖 |
chore | 变动事务 | 改动其他不影响代码的事务 |
revert | 合并分支 | 合并分支代码到其他分支 |
sync | 同步分支 | 同步分支代码到其他分支 |
impr | 改进功能 | 升级当前功能模块 |
学习了上面的我们来看一个例子
scope && subject
scope
用于说明commit
的影响范围。简要说明本次改动的影响范围,例如根据功能可划分为数据层
、视图层
和控制层
,根据交互可划分为组件
、布局
、流程
、视图
和页面
。从Angular
以往的提交说明来看,还是建议你在提交时对scope
补全。
例如本次修改了login的登录页面,那么我们的scope
可以写为login.tsx
subject
用于说明commit
的细节描述。文字一定要精简精炼,无需太多备注,因为Body
部分可备注更多细节,同时尽量遵循以下规则。
- 以动词开头
- 使用第一人称现在时
- 首个字母不能大写
- 结尾不能存在句号(
.
)
# 可以精确到单一文件,可以直接写单一文件名
style(login.jsx): 修改登录页面样式
# 对于范围修改,可以描述一个范围
feat(view) : 新增导出按钮
当然这些
scope
可以自行定义,公司内部可以进行集中讨论,形成一个比较完整的体系,对于单个文件,局部修改,全局修改等方面做出明确的规范,这样能够很好的统一风格,增强效率。
Body
该部分可书写多行,对subject
做更详尽的描述,内容应包括改动动机
与改动前后对比
。
Footer
主要用用于结论的表达,该部分只适用两种情况,分别是不兼容变动
与问题关闭
。
- 不兼容变动:当前代码与上一版本不兼容,则以
BREAKING CHANGE
开头,关联变动描述
、变动理由
和迁移方法
- 问题关闭:当前代码已修复某些
Issue
,则以Closes
开头,关联目标Issue
例子
git commit -m "feat(requisition文件夹): 完成资产领用新增和查询功能" -m "目前只完成了新增修改内容,对于详细信息正在开发中 -m 暂时关闭issue xx"
git commit -m "新增功能(requisition文件夹): 完成资产领用新增和查询功能" -m "目前只完成了新增修改内容,对于详细信息正在开发中 -m 暂时关闭issue xx"
上面的例子我们书写了一行commit
信息。我们可以看一下
feat
说明了是新增功能()
说明了影响范围:
后描述了核心信息body
: 描述了详细信息footer
:由于更改而产生的影响
上面的例子,基本算是一个比较ok的样例,大家可以根据自己的语言进行组织。当然对于
type
而言,也可以公司或组织内部内定,对现有的进行拓展。毕竟这些都是工具,是为了让我们更好的从事社会生产活动。
Git格式化提交解决方案
在说明Angular提交规范后,我们可以每次进行比较标准的git代码提交。但是这个时候,我们想通过工程化来帮助我们,减轻每次提交时的负担。我这里推荐一个工具commitizen
。因为当前目标还要通过工具生成与约束提交说明,而commitizen是一个基于模板驱动的约束规范工具,可扩展性很强,因此推荐使用commitizen。
安装(推荐局部安装)
- 全局
全局安装commitizen
与cz-conventional-changelog
。
npm i -g commitizen cz-conventional-changelog
不同系统中创建.czrc
文件,具体情况如下,加入以下内容。
Windows系统
:在C:/Users/$USER
目录中创建.czrc
文件MacOS系统
:在~
目录中创建.czrc
文件- 局部
局部部署
局部安装commitizen
与cz-conventional-changelog
。
npm i -D commitizen cz-conventional-changelog
在package.json
中指定scripts
与config
。
{
"script": {
"commit": "git-cz"
},
"config": {
"commitizen": {
"path": "cz-conventional-changelog"
// "path": "cz-conventional-changelog"
}
}
}`
点击查看源码。
使用上述两种方式配置好commitizen
,就能使用git cz
或npm run commit
或者yarn commit
代替git commit
了,依次完成所有步骤就能规范地提交了。
当然这里建议搭建使用
vscode
的中的git bash
命令工具,方便我们直接git add .
后执行yarn commit
的操作
会有以上的一些操作,这里的英文相对简单,这里我就不做过多的翻译了。但是如果我们想要一份中文的提交提示如何实现呢?
自定义中文提交规范
可能Angular提交规范
的某些情况不适合当前需求,可通过cz-customizable制定一份符合自己团队的提交规范
。
基于上述全局部署
与局部部署
,以下配置也有些许不同。
对于全局部署
,全局安装cz-customizable
,在.czrc
中重新指定path
。
npm i -g cz-customizable
{ "path": "cz-customizable" }
对于局部部署
,局部安装cz-customizable
,在package.json
中重新指定config
。
npm i -D cz-customizable
{
"config": {
"commitizen": {
"path": "cz-customizable"
}
}
}
不同系统中创建.cz-config.js
文件,具体情况如下,制定一份符合自己团队的提交规范
。为了方便理解,我将原来英文版的commit type
改成中文版的commit type
并增加几个type
。
- 在
Windows系统
全局部署:在C:/Users/$USER
目录中创建.cz-config.js
文件 - 在
MacOS系统
中全局部署:再~
目录中创建.cz-config.js
文件 - 在项目中局部部署:在根目录中创建
.cz-config.js
文件
//`.cz-config.js`文件
module.exports = {
allowBreakingChanges: ["feat", "fix"],
allowCustomScopes: true,
scopes: [],
types: [{
name: "功能:新增功能 (feat)",
value: "feat"
}, {
name: "修复:修复缺陷(fix)",
value: "fix"
}, {
name: "文档:更新文档 (docs)",
value: "docs"
}, {
name: "样式:变动格式 (style)",
value: "style"
},]
};
这个标准大家可以通过公司内部讨论来试下,大家自行配置。
这里把文件内容复制过去,就可以了。但是在这里需要看一下自己的
package.json
文件的type
是否为module
,如果是module
有两种方法。删除type:"nodule"
或者将.cz-config.js
文件名改为.cz-config.cjs
完成上述内容后运行yarn commit
命令,即可出现下面的内容。
总结
目前最流行的代码提交规范是Angular提交规范,使用commitizen
来实现统一的自动化提交,并通过给cz-customizable
来进行提交信息的自定义。