Commit Message 杂谈:劣与优
With Git, I think it was a lot about coming at a problem with fresh eyes, and really trying to think about the issues, and spending a fair amount of time thinking about what the real problems were and what I wanted the design to be. —— Linus Benedict Torvalds
我曾经经历过一段从 SVN 切换到 GIT 的过渡时期。
从最初的彷惶(为什么要切换到 GIT)、中间的坚持(说服并帮助其他开发同学),以及最后的成功(所有开发同学都能熟练运用)。
然后,往前回顾。支撑起无数次代码变更与重要里程碑发布的 GIT。它是最先进的版本管理系统!真香!
然而,GIT 本身虽好。如果使用者不善于使用,那么还是会生米煮成一锅粥。
混乱的 Commit Message
举个例子:翻了一下自己的 Github 上的 Commit Message 历史记录。
图 A - 反面教材一
图 B - 反面教材二
图 C - 反面教材三
可以发现,从 2019 年(或许更早)开始 Commit Message 记录完全是一团糟。以至于,现在我已经看不懂当时为什么要修改、为什么要提交。
同理,假如从一个产品级代码库、或者多个产品级共用的代码库,都是如此的话。那么,整个代码库的可维护性已经降到了最低,只是目前还没爆裂而已。
总结下存在的问题点:
- Commit Message 格式不统一,甚至是毫无格式可言;
- Commit Message 没有明确的问题,说明修改了什么内容、为什么要修改;
规范的 Commit Message
反面教材之后,当然是一个正规的格式:
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
- type - 更改的类型。例如:feat、fix、perf、docs、chore、style、refactor、test 等。
- feat:新功能(feature)
- fix:修补 bug(需要提供 bug 编号)
- perf:提高性能
- docs:文档(documentation)
- chore:构建过程或辅助工具的变动
- style:格式(不影响代码运行的变动)
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
- test:增加测试
- scope - 更改的作用域。例如:client、service、common 等。
- subject - 更改的主题。使用现在时的命令性语气,不要大写第一个字母,文字末尾不加句号。
- body - 对变更的描述,改变的动机,并将其与以前的行为进行对比。
- footer - 引用此提交关闭的 GitHub 问题的地方。
总结
“不以规矩,不能成方圆”。
软件开发是一个需要团队协作的工作,所以一个良好的规则可以让开发工作变得更加得心应手。
让我们一起每天进步一点点。
感谢各位小伙伴的阅读,这里是一个技术人的学习与分享。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- nginx(安装)
- Spring 中基于 AOP 的 XML操作方式
- python基础 -- 内建函数
- virtualenv 安装及使用
- Git 分布式版本控制 -- (1、基本使用)
- python爬虫----(scrapy框架提高(1),自定义Request爬取)
- python基础 -- 异常处理try的使用及一些思考
- 记一次关于MySQL与PHP的蠢事
- 编写一个简单的JQuery插件
- Spring AOP异常:Error creating bean with name ‘org.springframework.aop.aspectj.
- Tomcat7 Redis Session 共享
- CodeIgniter (CI) 框架学习 -- load_class
- Laravel框架学习 -- php artisan down/up
- Spring中基于注解@AspectJ的AOP实现
- python提高--running-python-code-contained-in-a-strin