首页 > 其他分享 >commit规范

commit规范

时间:2024-03-12 15:01:15浏览次数:41  
标签:fix BREAKING 规范 提交 类型 commit feat CHANGE

commit 的类型:

feat: 新功能、新特性
fix: 修改 bug
perf: 更改代码,以提高性能(在不影响代码内部行为的前提下,对程序性能进行优化)
refactor: 代码重构(重构,在不影响代码内部行为、功能下的代码修改)
docs: 文档修改
style: 代码格式修改, 注意不是 css 修改(例如分号修改)
test: 测试用例新增、修改
build: 影响项目构建或依赖项修改
revert: 恢复上一次提交
ci: 持续集成相关文件修改
chore: 其他修改(不在上述类型中的修改)
release: 发布新版本
workflow: 工作流相关文件修改

 

 

 

 

概述

约定式提交规范是一种基于提交消息的轻量级约定。 它提供了一组用于创建清晰的提交历史的简单规则; 这使得编写基于规范的自动化工具变得更容易。 这个约定与 SemVer 相吻合, 在提交信息中描述新特性、bug 修复和破坏性变更。

提交说明的结构如下所示:


<类型>[可选的作用域]: <描述>

[可选的正文]

[可选的脚注]

提交说明包含了下面的结构化元素,以向类库使用者表明其意图:

  1. fix: 类型 为 fix 的提交表示在代码库中修复了一个 bug(这和语义化版本中的 PATCH 相对应)。
  2. feat: 类型 为 feat 的提交表示在代码库中新增了一个功能(这和语义化版本中的 MINOR 相对应)。
  3. BREAKING CHANGE: 在可选的正文或脚注的起始位置带有 BREAKING CHANGE: 的提交,表示引入了破坏性 API 变更(这和语义化版本中的 MAJOR 相对应)。 破坏性变更可以是任意 类型 提交的一部分。
  4. 其它情况: 除 fix: 和 feat: 之外的提交 类型 也是被允许的,例如 @commitlint/config-conventional(基于 Angular 约定)中推荐的 chore:docs:style:refactor:perf:test: 及其他标签。 我们也推荐使用improvement,用于对当前实现进行改进而没有添加新功能或修复错误的提交。 请注意,这些标签在约定式提交规范中并不是强制性的。并且在语义化版本中没有隐式的影响(除非他们包含 BREAKING CHANGE)。 可以为提交类型添加一个围在圆括号内的作用域,以为其提供额外的上下文信息。例如 feat(parser): adds ability to parse arrays.

示例

包含了描述以及正文内有破坏性变更的提交说明

feat: allow provided config object to extend other configs

BREAKING CHANGE: `extends` key in config file is now used for extending other config files

包含了可选的 ! 字符以提醒注意破坏性变更的提交说明

chore!: drop Node 6 from testing matrix

BREAKING CHANGE: dropping Node 6 which hits end of life in April

不包含正文的提交说明

docs: correct spelling of CHANGELOG

包含作用域的提交说明

feat(lang): add polish language

为 fix 编写的提交说明,包含(可选的) issue 编号

fix: correct minor typos in code

see the issue for details on the typos fixed

closes issue #12

约定式提交规范

本文中的关键词 “必须(MUST)”、“禁止(MUST NOT)”、“必要(REQUIRED)”、“应当(SHALL)”、“不应当(SHALL NOT)”、“应该(SHOULD)”、“不应该(SHOULD NOT)”、“推荐(RECOMMENDED)”、“可以(MAY)” 和 “可选(OPTIONAL)” ,解释参考 RFC 2119 中所述。

  1. 每个提交都必须使用类型字段前缀,它由一个名词组成,诸如 feat 或 fix ,其后接一个可选的作用域字段,以及一个必要的冒号(英文半角)和空格。
  2. 当一个提交为应用或类库实现了新特性时,必须使用 feat 类型。
  3. 当一个提交为应用修复了 bug 时,必须使用 fix 类型。
  4. 作用域字段可以跟随在类型字段后面。作用域必须是一个描述某部分代码的名词,并用圆括号包围,例如: fix(parser):
  5. 描述字段必须紧接在类型/作用域前缀的空格之后。描述指的是对代码变更的简短总结,例如: fix: array parsing issue when multiple spaces were contained in string.
  6. 在简短描述之后,可以编写更长的提交正文,为代码变更提供额外的上下文信息。正文必须起始于描述字段结束的一个空行后。
  7. 在正文结束的一个空行之后,可以编写一行或多行脚注。脚注必须包含关于提交的元信息,例如:关联的合并请求、Reviewer、破坏性变更,每条元信息一行。
  8. 破坏性变更必须标示在正文区域最开始处,或脚注区域中某一行的开始。一个破坏性变更必须包含大写的文本 BREAKING CHANGE,后面紧跟冒号和空格。
  9. 在 BREAKING CHANGE: 之后必须提供描述,以描述对 API 的变更。例如: BREAKING CHANGE: environment variables now take precedence over config files.
  10. 在提交说明中,可以使用 feat 和 fix 之外的类型。
  11. 工具的实现必须不区分大小写地解析构成约定式提交的信息单元,只有 BREAKING CHANGE 必须是大写的。
  12. 可以在类型/作用域前缀之后,: 之前,附加 ! 字符,以进一步提醒注意破坏性变更。当有 ! 前缀时,正文或脚注内必须包含 BREAKING CHANGE: description

为什么使用约定式提交

  • 自动化生成 CHANGELOG。
  • 基于提交的类型,自动决定语义化的版本变更。
  • 向同事、公众与其他利益关系者传达变化的性质。
  • 触发构建和部署流程。
  • 让人们探索一个更加结构化的提交历史,以便降低对你的项目做出贡献的难度。

FAQ

在初始开发阶段我该如何处理提交说明?

我们建议你按照假设你已发布了产品那样来处理。因为通常总 有人 使用你的软件,即便那是你软件开发的同事们。他们会希望知道诸如修复了什么、哪里不兼容等信息。

提交标题中的类型是大写还是小写?

大小写都可以,但最好是一致的。

如果提交符合多种类型我该如何操作?

回退并尽可能创建多次提交。约定式提交的好处之一是能够促使我们做出更有组织的提交和 PR。

这不会阻碍快速开发和迭代吗?

它阻碍的是以杂乱无章的方式快速前进。它助你能在横跨多个项目以及和多个贡献者协作时长期地快速演进。

约定式提交会让开发者受限于提交的类型吗(因为他们会想着已提供的类型)?

约定式提交鼓励我们更多地使用某些类型的提交,比如 fixes。除此之外,约定式提交的灵活性也允许你的团队使用自己的类型,并随着时间的推移更改这些类型。

这和 SemVer 有什么关联呢?

fix 类型提交应当对应到 PATCH 版本。feat 类型提交应该对应到 MINOR 版本。带有 BREAKING CHANGE 的提交不管类型如何,都应该对应到 MAJOR 版本。

我对约定式提交做了形如 @jameswomack/conventional-commit-spec 的扩展,该如何版本化管理这些扩展呢?

我们推荐使用 SemVer 来发布你对于这个规范的扩展(并鼓励你创建这些扩展!)

如果我不小心使用了错误的提交类型,该怎么办呢?

当你使用了在规范中但错误的类型时,例如将 feat 写成了 fix

在合并或发布这个错误之前,我们建议使用 git rebase -i 来编辑提交历史。而在发布之后,根据你使用的工具和流程不同,会有不同的清理方案。

当使用了  在规范中的类型时,例如将 feat 写成了 feet

在最坏的场景下,即便提交没有满足约定式提交的规范,也不会是世界末日。这只意味着这个提交会被基于规范的工具错过而已。

所有的贡献者都需要使用约定式提交规范吗?

并不!如果你使用基于 squash 的 Git 工作流,主管维护者可以在合并时清理提交信息——这不会对普通提交者产生额外的负担。 有种常见的工作流是让 git 系统自动从 pull request 中 squash 出提交,并向主管维护者提供一份表单,用以在合并时输入合适的 git 提交信息。

标签:fix,BREAKING,规范,提交,类型,commit,feat,CHANGE
From: https://www.cnblogs.com/luckyuns/p/18068329

相关文章

  • Restful接口规范
    1.简介2000年RoyFielding博士在其博士论文中提出REST(RepresentationalStateTransfer)风格的软件架构模式后,REST就基本上迅速取代了复杂而笨重的SOAP,成为WebAPI的标准了。RESTful作为目前最流行的API设计规范,一定有着它独有的魅力:强大、简介、易上手。2.URL设计2.1数据的......
  • XYZ切片和TMS切片规范有何不同?
    仅仅只是y的方向从上到下和从下到上的区别?那么说来,xyz切片和wmts切片顺序是完全一致的了???只有tms比较特别?当然xyz切片和wmts切片的获取规则不同,而xyz和tms切片的获取规则相同。参考1:https://www.cnblogs.com/d1012181765/p/13631169.html参考2:https://blog.csdn.net/AllBluefm/ar......
  • docker commit命令,本地镜像生成
    1.本地镜像生成dockercommit-m"commitInfo"-a="authorName"containerId新创建的目标镜像名:[标签名]  镜像的提交,可以让我们不断去叠加镜像: https://www.bilibili.com/video/BV1gr4y1U7CY?p=25&spm_id_from=pageDriver&vd_source=7ce721b64f52f392bdafe83543918639......
  • git的"You can't push commits with committe"解决方法
    如果使用错误的用户和邮箱执行了git提交,在执行gitpush时将遇到如下错误:![remoterejected]feature_116390305_story_0->feature_116390305_story_0(Youcan'tpushcommitswithcommitter‘yijian’oremail'[email protected]'whoisnotexitamongtheregisteredu......
  • List remote Git branches and the last commit's author and author date for each b
    Listingeachbranchanditslastrevision'sdateinGit ListremoteGitbranchesandthelastcommit'sauthorandauthordateforeachbranch.Sortbymostrecentcommit'sauthordate. #Credithttp://stackoverflow.com/a/2514279f......
  • 在Docker中,docker commit生成的镜像和dockerfile生成镜像有什么区别?
    在Docker中,dockercommit和基于Dockerfile构建镜像的过程和区别主要包括以下几个方面:1.dockercommit过程与特点:过程:启动一个容器,通常基于某个基础镜像。在容器内部执行各种操作,例如安装软件、修改配置文件等。使用dockercommit命令将容器的当前状态保存为新......
  • python变量命名规范
    简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。Python中标识符的命名不是随意的,而是要遵守一定的命令规则标识符是由字符(A~Z和a~z)、下划线和数字组成,但第一个字符不能是数字。标识符不能和......
  • IT服务规范
    IT运维服务规范(模板)twt社区运维网工2023-10-3110:01重庆一、总则本部分规定了IT运维服务支撑系统的应用需求,包括IT运维服务模型与模式、IT运维服务管理体系、以及IT运维服务和管理能力评估与提升途径。二、参考标准下列文件中的条款通过本部分的引用而成为本部......
  • Redis Docekr WARNING Memory overcommit must be enabled! Without it, a background
    Docker容器ssr-redis|1:C01Mar202422:00:46.869#oO0OoO0OoO0OoRedisisstartingoO0OoO0OoO0Oossr-redis|1:C01Mar202422:00:46.869#Redisversion=7.0.10,bits=64,commit=00000000,modified=0,pid=1,juststartedssr-redis|1:C01Mar......
  • 面试必备:一线大厂Redis缓存设计规范与性能优化
    说在前面你是否在使用Redis时,不清楚Redis应该遵循的设计规范而苦恼?你是否在Redis出现性能问题时,不知道该如何优化而发愁?你是否被面试官拷问过Redis的设计规范和性能优化而回答不出来别慌,看这篇文章就行了本文,已收录于,我的技术网站aijiangsir.com,有大厂完整面经,工作技术,架构......