惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
宝玉的分享
宝玉的分享
I
InfoQ
P
Privacy International News Feed
V
V2EX
IT之家
IT之家
S
SegmentFault 最新的问题
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V2EX - 技术
V2EX - 技术
C
CERT Recently Published Vulnerability Notes
C
Check Point Blog
The Register - Security
The Register - Security
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
AWS News Blog
AWS News Blog
M
MIT News - Artificial intelligence
C
Cyber Attacks, Cyber Crime and Cyber Security
F
Fortinet All Blogs
B
Blog
N
Netflix TechBlog - Medium
B
Blog RSS Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
T
Threatpost
Forbes - Security
Forbes - Security
U
Unit 42
A
Arctic Wolf
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Palo Alto Networks Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Recorded Future
Recorded Future
L
Lohrmann on Cybersecurity
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
月光博客
月光博客
Spread Privacy
Spread Privacy
MongoDB | Blog
MongoDB | Blog
Jina AI
Jina AI
I
Intezer
V
Visual Studio Blog
阮一峰的网络日志
阮一峰的网络日志
The Hacker News
The Hacker News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
LangChain Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
MyScale Blog
MyScale Blog
腾讯CDC
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
量子位

Razeen`s Blog

Let's Encrypt 推出 Gen Y 根证书架构:揭示 Web PKI 的五大未来趋势 通过 Wi-Fi 自动备份你的 iPhone 到 Nas 管理培训感悟:从技术视角看管理之路 UPS 一拖多:保护你的 NAS 和 Linux 服务器 从影音中心到 AI 助手:我的50款 Homelab 服务清单 从SSL证书有效期将缩短到47天聊开去 部署一个自己的 Running Page 谈谈特斯拉 Model Y 用车一年的感受和费用分析 弃用 Disqus 评论,使用自建 Waline 使用 Prometheus 和 Grafana 搭建你的证书监控面板 服务器迁移记:一次磁盘换板引发的Linux分区与挂载的学习 改善信息来源, 利用 RSS 高效获取资讯 (RSShub + Reeder5 + WeWe RSS) 多种 Docker 镜像拉取解决方案与实践 App分享 | AppCleaner - Mac上的卸载神器 Azure OpenAI API 申请和使用 如何开通 OneKey 虚拟信用卡,并充值消费 如何拥有一个可长期在国内使用的国外手机号码 分享开通 ChatGPT Plus 过程 如何开通 Depay 虚拟信用卡,并充值消费 如何开通欧易Web3钱包, 交易入账 如何5分钟内1块钱注册 ChatGPT 如何注册美区的 Apple ID (2023年/无需科学上网) NAS折腾记(11): NASTool3.0体验和降级 NAS折腾记(10): Docker版本的NASTool配置 NAS折腾记(9): NASTool与微信交互,微信发送消息远程下载电影【多图】 NAS折腾记(8):群晖安装 NASTool 实现影音半自动化【多图】 内网穿透(2):Tailscale 组网实现内网穿透,操作简单,无成本 内网穿透(1):总结了11中内网穿透的方式,总有一种适合你 NAS折腾记(7):从零开始设置(黑)群晖系统 NAS折腾记(6):黑群晖系统安装好后怎么洗白? NAS折腾记(5):群晖硬盘休眠设置与分析 NAS折腾记(4): 20分钟手把手带你完美安装 DS918+ 黑群晖7.1.1 NAS折腾记(3):NAS 装机 NAS折腾记(2):B360-ITX 双M.2 双2.5G网口 6 SATA主版 开箱 NAS折腾记(1):328元的4盘位Nas机箱开箱 Openwrt + Clash 全局科学上网 Newifi3 刷入 OpenWrt 固件 v21.02 利用 Markdown 画一些流程图、时序图、甘特图等 Homelab(8): 搭建自用 Gitlab 与 Docker 仓库 Nginx Tcp 转发保留客户端真实 IP (PROXY Protocol) Homelab (7):IPSec VPN(基于证书认证)客户端设置 Homelab (6): 基于自签发证书的 IPSec VPN 搭建 Homelab (5): DDNS 动态域名解析 Homelab (4): Linux 服务器基础环境准备 Homelab (3): 整体网络与基础硬件介绍 Go学习笔记(十)老项目迁移 go module 大型灾难记录 Github Actions 初体验之自动化部署 Hexo 博客 记一次 Nginx DNS 缓存导致转发问题 Homelab (2): 电信悦me网关修改桥接模式,路由器拨号 Homelab (1):5分钟上手黑群晖 NAS 终极 Bash 脚本指南 Typora 自动上传图片到七牛云 Ubuntu 20.04 LTS 有线网卡驱动安装 折腾 Ubuntu 20.04 LTS 开发环境 Go学习笔记(九) 计时器的生命周期[译] 利用 git hook 规范你的代码与 commit message 超详细 vim 配置 (with MacVim) Golang 中的 RESTful API 最佳实践 折腾服务器(开篇) 我的第一台个人服务器 Newifi3 实现低成本家庭级科学上网 Go学习笔记(八) | 使用 os/exec 执行命令 如何用 Go 调用 Windows API Mac OS 自动根据 WI-FI 名字改变网络位置 关于 Docker 清理 MIME Types 速查表 Go学习笔记(七) | 理解OAuth 2.0并实现一个客户端 我又又又把博客迁移了 Go学习笔记(六) | 使用swaggo自动生成Restful API文档 Go学习笔记(五) | 使用代码片段(snippets)提高编码效率 书单 - 2018 IPFS 初体验,利用 IPFS 托管你的静态网站 记一次 PostgreSQL LIKE 索引优化,联合字段 LIKE 查询优化。 Disqus 添加有趣的 Reactions 的功能 TLS 1.3 详解 (RFC 8446解读) gRPC在Go中的使用(三)gRPC实现TLS加密通信与流模式 gRPC在Go中的使用(二)gRPC实现简单通讯 gRPC在Go中的使用(一)Protocol Buffers语法与相关使用 CentOS 安装 tshark 抓包工具 Go学习笔记(四) | win上使用VSCode搭建Go开发环境 日常 Postgres 数据库点滴记录 简单了解 PKCS 规范 美食篇 | DIY戚风蛋糕(烤箱做蛋糕) Go学习笔记(三) | 怎么写Go基准测试(性能测试) TLS1.3正式更新,为Nginx添加TLS1.3的支持 一次诡异的数据库删除 GitHub Pages自定义域名开启HTTPS 证书透明度是什么?它是怎么工作的? Go学习笔记(二) | 我对 recover 的一点误解 搭建证书透明度(certificate-transparency)日志服务之从入门到放弃 修复远程登陆 Centos 时,出现 UTF-8 Warning HTTPS篇之SSL握手过程详解 Go学习笔记(一) | postgres与golang点点滴滴 AWS 命令行界面(aws-cli)从安装到快速上手 数字证书分类及怎么区分各类数字证书 常用 linux 命令小结(一)文件目录操作 云服务器搭建 hexo 博客,git hooks自动更新 SSH 免密登陆, SSH Config 配置 Golang CGO Mac 交叉编译 Windows 使用 goose 让数据库迁移更加轻松 开始使用Ghost
规范 git commit message 与自动化版本控制
2020-04-13 · via Razeen`s Blog

git commit message是你对你所编码内容的总结概括。规范、详细的git commit message不仅能体现你的内容概括能力,还能为你自己和团队,或项目带来巨大的好处,这也是我所推崇的。但很多小伙伴不愿意花时间在这里,经常会写出优化了一些功能修复了一些BUG等等模糊不清的commit message,完全没有意识到这么写会带来一些严重的问题:

  • 管理者/其他项目参与者无法快速获取有用信息,判定修改内容,只有花大量时间阅读源码;
  • 事后无法快速定位以前遇到的类似问题;
  • 无法自动化版本控制,只有每次重新阅读代码,手动写一些详细的描述,用来发布新版或提交测试。

规范、详细的git commit message不仅能解决这些问题,还能带来更多的好处。

  • 提供详细的历史信息,方便快速浏览,不用花大量时间阅读源码;

  • 提供高效的团队合作,参与者能从提交信息中看到项目的进度;

  • 可以快读定位问题,如果现在出现一个BUG,可以从BUG的类型,通过提交信息快读定位可能是哪次修改带来的;

  • 可以直接从commit中总结周报,日报,项目报告;

  • 可以直接从commit生成CHANGELOG;

  • 影响团队其他成员,培养大家养成良好的习惯。

下面我们推荐一个git commit message书写规范,以及如何通过commit message自动完成版本控制,生成CHANGELOG。

规范

我们严格遵循Conventional Commits 的约定,详细内容可以点击链接查看,下面我们简单总结一下。

commit messge格式如下:

<type>[optional scope]: <description>

[optional body]

[optional footer]

我们先举几个例子,再详细解析这个格式,如下:

feat(xxx): 新增了xxx功能,实现了xxx 
BREAKING CHANGE: 我们需要切换到V2了
fix(comment): 修复多用户评论时,顺序错乱问题
feat(comment): 新增用户评论功能
chore(comment): 新增了评论部分的swagger文档
docs(readme): 创建README.md文件

是不是不用我解释就懂了,对的就这么简单:

  • <type> : 是指本次提交的类型,一般有feat,fix,chore,docs,style,refactor,perf,test等,这里我推荐使用feat,fix,chore,docs四个,也就先说明这几个,更多的看这里
    • feat: 说明本次提交的是一个新的feature;
    • fix: 修复了一个bug;
    • chore: 一些没有构成feature, 但又不是其他类型的提交;
    • docs: 只是修改了文档相关的内容。
  • [optional scope]: 从单词的意思我们不难看出, 这里可以选填一个范围,也就是说,我们可以通过该关键词说明本次提交影响的范围(或许是一个模块,某一个功能,某一个业务等)。
  • <description> : 这里就是我们需要详细的描述本次提交内容的部分了。
  • [optional body] ,[optional footer] 如果还有需要补充或者详细展开的部分,我们可以在这两个部分说明。

自动化版本控制

有了规划化的提交后,我们就可以利用standard-version实现自动化版本控制与CHANGELOG自动生成了。

首先,我们全局安装一下standard-version

npm install -g standard-version

安装完成,可以查看一下版本,推荐一个团队最好使同一个大版本,避免一些奇怪的问题。

standard-version --version

当然,你也可以直接安装指定版本。

npm install -g standard-version@7.1.0

有了规范的提交与standard-version 后,我们就可以愉快的进行版本控制和自动生成CHANGELOG了,只需要每次提交之后,在你的项目下面运行:

即可。

我们很容易想到,standard-version可能会将git commit message, 自动整理生成CHANGELOG。 但版本升级怎么做到,规则是怎么样的呢?

这就取决于上面的git commit message中的type了。

  • 其中 fix对应于语义版本patch, 白话一点就是升级0.0.1个版本;
  • feat对应于与minor,也就是升级0.1.0个版本;

那么怎么实现从1.0.0 2.0.0呢,也就是改变major版本呢?

  • 其实只要在任何类型commit message后面的[optional body][optional footer]部分,以**BREAKING CHANGE: ** 开头,写一些版本升级的内容即可,如:

    feat(xxx): 新增了xxx功能,实现了xxx 
    BREAKING CHANGE: xxxxxx
    

这里我们补充点语义版本控制的内容。

通常我们看到的版本是这样的:1.1.11.0.0-beta.11 或者 1.0.0-rc ,其实这种写法就是遵循语义化版本规范的,详细内容可以点上面链接查看,我们主要说明一下核心语法,即:

<version core> ::= <major> "." <minor> "." <patch>

也就是版本 1.2.3,主版本号为1,次要版本为2,补丁号为3.

到这里你应该对规范化的git commit message有所了解,以及知道通过standard-version控制版本与自动生成CHANGELOG了。希望能对你有所帮助,养成良好的习惯,从而提高生产效率。