git commit message 工程实践

本文介绍我在工作中积累的一些工程实践, 不定期更新.

Why

  • 更好的团队间协作
  • 提供更多的信息, 方便快速浏览和检索
  • 提高 code review 效率
  • 方便 git blamegit revert
  • 可直接从 commit 生成 ChangeLog

前置知识

关于什么是良好的 git commit message 请看下面给出的几篇文章,本文只讲他们没有给出的工程实践问题:

  • Commit message 和 Change log 编写指南
  • Git 提交的正确姿势:Commit message 编写指南
  • AngularJS真实提交记录

现实中的问题

  • commitizen 的流程不符合个人/团队的需求
  • 我想定义自己的模块/组件 (scopes)
  • 哪些类型的修改可以引入 breaking changes
  • 不同类型的修改, 对应不同的模块列表

相信很多人看完上面的文章后, 发现流程跟自己想要的不符, 就此止步. 很遗憾, 我最初接触的时候, 也是这样. 这些文章的通病就是没有给出可以真正落地实施的方案, 虽然大家都觉得理念很好, 但是实践起来并不好用, 也就放弃了.

我最初的想法是自己写插件解决, 但是因为时间问题没有最终成行, 等我再次将这个想法提上日程的时候, 我发现了 cz-customizable 这个工具, 不但满足我的需求, 很多地方超出期望 : )

动手实践

安装:

npm install -g commitizen
npm install -g cz-customizable

在项目根目录下加入下面两个文件:

下载链接: .cz-config.js package.json

package.json

{
  "config": {
    "commitizen": {
      "path": "cz-customizable"
    }
  }
}

.cz-config.js

'use strict';
module.exports = {
  // 不要更改types, 只允许出现这几种
  types: [
    {value: 'feat',         name: 'feat:        新功能 (feature)'},
    {value: 'fix',          name: 'fix:         修复bug'},
    {value: 'docs',         name: 'docs:        文档 (documentation)'},
    {value: 'style',        name: 'style:       格式 (不影响代码运行的变动)'},
    {value: 'refactor',     name: 'refactor:    重构 (即不是新增功能,也不是修改bug的代码变动)'},
    {value: 'test',         name: 'test:        增加测试'},
    {value: 'chore',        name: 'chore:       构建过程或辅助工具的变动'},
  ],
  // 按照项目模块, 自行配置
  scopes: [
    {name: 'exampleScope'},
    {name: 'changeMe'}
  ],
  // 可以根据匹配的类型不同, 显示不一样的scope, 动手实践下!
  /*
  scopeOverrides: {
    fix: [
      {name: 'merge'},
      {name: 'style'},
      {name: 'e2eTest'},
      {name: 'unitTest'}
    ]
  },
  */
  allowCustomScopes: true,
  allowBreakingChanges: ['feat', 'fix']
}; 

把需要使用 git commit 的地方 改为 git cz, 按照交互式向导提示填写即可

Demo

图片很大, 但是很值得一看, 请耐心等待一会儿 : )

你可能感兴趣的:(开发问题,工程实践)