用commitizen写出angularjs风格的源代码提交历史

jopen 9年前

你的项目中是怎么写提交历史的?

不论你是用SVN、GIT或是其他源代码仓库,去看看实际项目中的提交历史吧,你是否能很快地从中找到之前某一次的改动吗?

看看这张图中的提交历史,眼熟吗?

这还算是不错的呢,还有很多项目的提交历史根本就是大段空白!很多程序员其实并不清楚为什么要写 提交历史(commit messge)

早年间,提交历史是直接写在源代码第一页的注释里面的,标明何时何人改动了什么内容,便于后人维护的时候来理解、定位、评审、追溯。

后来有了更好用的源代码版本仓库,于是这些内容就需要在每次提交时候写上。历史不能修改,也不能后补,发生了就发生了。

提交历史是给人读的,所以一定要考虑可读性、准确性、完整性,并且通过关键词便于后期查找。每一次提交只做一件事情,是写出好的提交历史的关键。

Angular.js开源项目如何编写提交历史

Angular.js 是著名的开源项目,看看人家提交 提交历史规范

每条提交历史包含 题头、主体、脚注 三部分,而题头又分为 类型、范围、主题 三部分。

< 类型 >(< 范围 >): < 主题 >  <-空白行->  < 主体 >  <-空白行->  < 脚注 >

类型(Type)

必须是下列中的一种:

  • feat: 新功能(feature)
  • fix: 修复缺陷
  • docs: 仅文档更新
  • style: 不影响代码含义的变更,如空格、格式化、漏掉分号等
  • refactor: 重构,并未修复缺陷或添加功能
  • perf: 性能(performance)提升
  • test: 补充测试用例
  • chore: 改进构建过程或辅助工具,例如文档生成工具

范围(scope)

指定修改的位置和范围,如包名、类名、函数名等。非必填,但是建议填。

主题(subject)

描述变更的内容。

  • 使用现在时态的祈使句,如”change”,但不要写”changed”或”changes”。对于中文那就是”修改xxx”而不要写”修改了xxx”
  • 英文首字母不要大写
  • 结尾不用写句号(.或。)

主体(body)

主体的风格与主题部分一致,用于详细描述本次变更的动机,以及与上次提交差异。

脚注(footer)

脚注应该包含关于 破坏性变更 的信息,以及所关闭的任务ID,如github issue或JIRA-ID。

破坏性变更需要以 BREAKING CHANGE: 作为开头,后面接1个空格或2个空行。

回滚(Revert)

如果需要撤销之前的Commit,那么本次Commit Message中必须以 revert: 开头,后面紧跟要撤销那次提交的题头部分,格式不变。主体则必须要记录撤销那次提交版本号。

用Commitizen命令行工具来增强git

Commitizen 是2015年4月出现在Github上的开源项目,用于增强git命令行,使人们能方便的写出如angular.js项目般的提交历史,还可以直接将这些提交历史导出为发布说明(change log)。

(SVN用户自己想办法吧,其实也可以在commit hook里做文章)

安装

npm install -g commitizen

配置打开项目执行如下命令:

commitizen init cz-conventional-changelog --save --save-exact

使用

在需要 git commit 的地方更换成 git cz 指令即可呼出Commitizen的交互界面,跟着提示做即可。

</div>

来自: http://www.jackyshen.com/2016/01/15/write-angularjs-style-commit-message-with-commitizen/