掌握 Conventional Commits 规范:提升项目版本控制的清晰度与自动化

在软件开发的过程中,版本控制和变更日志的维护是至关重要的。它们不仅帮助开发者追踪项目的演变历程,也为用户和其他开发者提供了清晰的更新说明。为了实现这一目标,Conventional Commits 规范应运而生,旨在提供一种标准化的 Git commit 信息格式,以便自动化工具能够更好地解析和生成变更日志。

什么是 Conventional Commits 规范?

Conventional Commits 是一种约定,它定义了一种特定的 commit 信息格式,使得自动化工具能够理解并据此执行各种任务,如自动生成变更日志、决定版本号的升级策略等。这种规范基于 semver(语义化版本控制)原则,将 commit 信息分为不同的类型,并允许添加可选的脚本来描述更改的性质。

它是一种基于提交消息的轻量级公约,旨在创建清晰、可读的提交历史记录。通过遵循这一规范,我们可以更容易地编写基于规格的自动化工具,例如自动生成版本号和更新日志。

这个规范起源于 Angular 项目的提交准则,并逐渐被许多其他项目和组织所采用。

Conventional Commits 规范的核心要素

Commit 类型

  • feat: 新功能(Feature)
  • fix: 修复bug(Bugfix)
  • docs: 文档变更(Documentation)
  • style: 代码格式(不影响代码运行的变动)
  • refactor: 代码重构(Refactoring, 无新功能添加,无bug修复)
  • perf: 性能优化(Performance Improvement)
  • test: 增加测试(Testing)
  • chore: 构建过程或辅助工具的变动(如不需要发布新版本的改动)

脚注

  • BREAKING CHANGE: 破坏性变更,通常用于 major 版本升级。当 commit 信息中包含这个脚注时,表明此次提交引入了不向后兼容的更改。

如何应用 Conventional Commits 规范

  1. 教育团队成员:确保所有团队成员都了解并遵循这种规范。
  2. 使用工具辅助:可以使用 commitizen 这样的工具来帮助团队成员生成符合规范的 commit 信息。
  3. 在项目中推广:在项目的 README 或其他文档中明确指出使用 Conventional Commits 规范,并提供相应的指南或模板。

自动化工具与 Conventional Commits 规范

使用 Conventional Commits 规范的一个主要好处是能够与各种自动化工具配合使用,如 standard-versionconventional-changelog 等。这些工具可以根据提交的类型和脚注自动生成变更日志,并决定适当的版本号升级策略。

示例

假设你的团队遵循了 Conventional Commits 规范,那么一个典型的 commit 信息可能如下所示:

feat: 添加新的用户认证功能BREAKING CHANGE: 旧的认证系统已被新的系统替代,请更新你的代码以适应新的 API。

这个 commit 信息表明这是一个新功能的添加(feat),并且包含了一个破坏性变更(BREAKING CHANGE)。

Conventional Commits 规范定义了一系列的 commit 类型,每种类型都有其特定的用途和含义。以下是每种类型的详细说明和使用场景:

1. feat: 新功能(Feature)

使用场景:当你添加了一个新的功能或者改进了现有功能时,应该使用 feat 类型。

示例

feat: 增加夜间模式切换功能

2. fix: 修复bug(Bugfix)

使用场景:当你修复了一个bug或者问题时,应该使用 fix 类型。

示例

fix: 修复登录页面的输入验证问题

3. docs: 文档变更(Documentation)

使用场景:当你更新了项目的文档,比如 README、开发指南或其他文档时,应该使用 docs 类型。

示例

docs: 更新贡献指南

4. style: 代码格式(Style)

使用场景:当你更改了代码的格式,比如缩进、换行、空格等,而这些更改并不影响代码的运行结果时,应该使用 style 类型。

示例

style: 统一代码缩进为两个空格

5. refactor: 代码重构(Refactor)

使用场景:当你重构了代码,即改变了代码的结构或风格,但没有添加新功能或修复bug时,应该使用 refactor 类型。

示例

refactor: 优化数据库查询逻辑

6. perf: 性能优化(Performance Improvement)

使用场景:当你对代码进行了性能提升,比如优化算法、减少内存使用、提高响应速度时,应该使用 perf 类型。

示例

perf: 优化图片加载速度

7. test: 增加测试(Testing)

使用场景:当你添加了新的测试用例或者改进了现有测试时,应该使用 test 类型。

示例

test: 为用户认证流程添加单元测试

8. chore: 构建过程或辅助工具的变动(Chores)

使用场景:当你进行了不涉及代码逻辑的更改,比如构建脚本的更新、依赖管理、配置文件的变动等,应该使用 chore 类型。

示例

chore: 更新依赖到最新版本

9. ci: 持续集成(Continuous Integration)

使用场景:当你更改了与持续集成(CI)流程相关的配置或脚本时,可以使用 ci 类型。

示例

ci: 修复 GitHub Actions 工作流中的 bug

10. revert: 回退(Revert)

使用场景:当你撤销了一个之前的提交时,可以使用 revert 类型,并在消息中指定被撤销的提交信息。

示例

revert: 撤销 "feat: 添加新的用户认证功能",因为存在安全隐患

11. build: 构建系统(Build)

使用场景:当你更改了项目的构建系统或影响构建过程的文件时,可以使用 build 类型。

示例

build: 优化 Webpack 配置以减少打包大小

12. init: 初始化(Initialization)

使用场景:当你初始化项目或添加了重要的初始化代码时,可以使用 init 类型。

示例

init: 初始化项目结构和基础配置

13.BREAKING CHANGE: 破坏性变更(Breaking Change)

使用场景:当你的提交包含了一个破坏性变更,即这个变更会导致现有功能无法正常工作或API不兼容时,应该在 commit 信息中添加 BREAKING CHANGE 脚注。

示例

feat: 移除旧的认证方式BREAKING CHANGE: 旧的认证方式已被移除,请所有用户迁移到新的认证系统。

遵循 Conventional Commits 规范可以帮助你的团队更清晰地记录项目的历史变更,同时也为自动化工具提供了执行任务的基础。确保你的团队成员都了解并遵循这些规范,以便最大化地发挥它们的作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/814206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue Router 路由动态缓存组件

文章目录 一、简介基本用法生命周期钩子 二、定义是否缓存组件三、缓存组件1. 通过 :include 属性实现vue2.x中vue3.x中 2. 通过 v-slot 功能实现3. 通过 v-if 来实现 四、注意事项 一、简介 Vue Router 允许你缓存路由组件,这样在用户导航回之前的页面时&#xff…

python:算法竞赛入门之一

计算 斐波那契数列(Fibonacci sequence),不受长整型位数限制。 编写 fibonacci.py 如下 # -*- coding: utf-8 -*- """ 计算 斐波那契数列(Fibonacci sequence)""" import sys from …

Go 认证与授权(Authentication)

场景 我们应用开发经常会遇到认证和授权问题,比如:ERP系统、OA系统、CRM系统等等,这些系统都需要用户登录后才能访问,如何实现用户登录和权限认证呢? 我们来看下对应的解决方案: Python的装饰器模式 熟…

程序员Java.vue,python前端后端爬虫开发资源分享

bat面试资料 bat面试题汇总 提取码:724z 更多资料

项目总体测试计划书

目的:编写此测试方案的目的在于明确测试内容、测试环境、测试人员、测试工作进度计划等,以保证测试工作能够在有序的计划安排进行。 测试目标:确保XXX项目的需求分析说明书中的所有功能需求都已实现,且能正常运行;确保…

【Web】DASCTF 2023 0X401七月暑期挑战赛题解

目录 EzFlask MyPicDisk ez_cms ez_py 让俺看看401web题 EzFlask 进来直接给了源码 import uuidfrom flask import Flask, request, session from secret import black_list import jsonapp Flask(__name__) app.secret_key str(uuid.uuid4())def check(data):for i i…

nuxt.config.js配置

babel 预设在构建客户端/服务端的版本。 默认为 nuxt/babel-preset-app 在client构建中是ie:9,在server构建中是node:current。 build.babel.presets 中配置的预设将应用于客户端和服务器构建。目标将由 Nuxt 相应地设置(客户端/服务器&#…

React ant 点击导航条闪烁

问题 : 点击当前位置会出现闪一下的效果 另一种点击方式 , 不会闪 原因 : 没有传递具体的参数给点击事件 , 导致在函数内部无法准确判断要展示哪个子菜单,可能导致页面状态的短暂变化,出现闪烁效果 代码 : // 左侧子菜单弹出const showSonMenu routeK…

【数据挖掘】实验7:高级绘图(上)

实验7:高级绘图(上) 一:实验目的与要求 1:了解R语言中各种图形元素的添加方法,并能够灵活应用这些元素。 2:了解R语言中的各种图形函数,掌握常见图形的绘制方法。 二:实…

python-study-day1

ps:前言 可做毕设,html,web,app,小程序,bug修改,可加急 作者自述 作为一名前端开发工程师,这个大环境不好的情况下,我试过我前端接单子但是没有后端&#xff0c…

用java实现单链表的头插,尾插和反转

今天来练习以下单链表的一些操作,以下的操作都是带有头节点的链表。 定义链表节点类 定义了节点中的值,节点的下一个节点,和一些基本的方法。 public static class ListNode{int val;ListNode next;public ListNode() {}public ListNode(in…

NPM 命令备忘单

NPM 简介 Node Package Manager (NPM) 是 Node.js 环境中不可或缺的命令行工具,充当包管理器来安装、更新和管理 Node.js 应用程序的库、包和模块。对于每个 Node.js 开发人员来说,无论他们的经验水平如何,它都是一个关键工具。 NPM 的主要…

pom.xml显示灰色并被划线

在使用 IDEA 进行开发的过程中,有时候会遇到 pom.xml 显示灰色并被划线的情况,如下图: 这一般是因为该文件被 Maven 忽略导致的,可以进行如下操作恢复: 设置保存后,可以看到 pom.xml 恢复了正常&#xff1a…

计算机网络书籍--《网络是怎样连接的》阅读笔记

第一章 浏览器生成信息 1.1 生成HTTP请求信息 1.1.1 URL Uniform Resource Locator, 统一资源定位符。就是网址。 不同的URL能够用来判断使用哪种功能来访问相应的数据,比如访问Web服务器就要用”http:”,而访问FTP服务器用”ftp:”。 FTP&#xff…

支付系统核心逻辑 — — 状态机(JavaGolang版本)

支付系统核心逻辑 — — 状态机 代码地址:https://github.com/ziyifast/ziyifast-code_instruction/tree/main/state_machine_demo 1 概念:FSM(有限状态机),模式之间转换 状态机,也叫有限状态机&#xff08…

label 的作用是什么?如何使用?

label标签来定义表单控件的关系&#xff1a;当用户选择label标签时&#xff0c;浏览器会自动将焦点转到和label标签相关的表单控件上。 使用方法1&#xff1a; <label for"mobile">Number:</label> <input type"text" id"mobile&quo…

Linux Docker挂载群晖WebDAV到本地

挂载群晖的WebDAV&#xff0c;使用群晖的WebDAV Server搭建的服务。 群晖配置了证书。 使用镜像&#xff1a; docker-webdav-client docker run -it --rm \--device /dev/fuse \--cap-add SYS_ADMIN \--security-opt "apparmorunconfined" \--env "WEBDRIVE_U…

零基础如何学习linux知识

零基础学习Linux需要一个结构化和逐步深入的学习计划。以下是一个学习方向和框架仅供参考&#xff1a; 一&#xff0c; 学习方向 1. **了解Linux基础**&#xff1a; - 理解开源概念。 - 了解Linux的历史和它的重要性。 - 认识不同的Linux发行版。 2. **命令行操作*…

基于OptiTrack跟踪系统和Turtlebot机器人的视觉SLAM定位评估

本文旨在介绍使用OptiTrack光学跟踪系统和Turtlebot机器人进行视觉SLAM定位实验的详细流程&#xff0c;包括实验平台搭建过程、数据处理过程以及SLAM估计评估方法。由于涉及知识较多&#xff0c;部分内容只给出了相关参考博文链接。 1 实验平台搭建 实验平台包括OptiTrack光学…

Golang | Leetcode Golang题解之第26题删除有序数组中的重复项

题目&#xff1a; 题解&#xff1a; func removeDuplicates(nums []int) int {n : len(nums)if n 0 {return 0}slow : 1for fast : 1; fast < n; fast {if nums[fast] ! nums[fast-1] {nums[slow] nums[fast]slow}}return slow }