如何规范你的Git commit()

阿里妹导读: commit message应该如何写才更清晰明了?团队开发中有没有遇到过让人头疼的git commit?本文分享在git commit规范建设上的实践,规定了commit message的格式,并通过webhook在提交时进行监控,避免不规范的代码提交。

背景
Git每次提交代码都需要写commit message,否则就不允许提交。一般来说,commit message应该清晰明了,说明本次提交的目的,具体做了什么操作……但是在日常开发中,大家的commit message千奇百怪,中英文混合使用、fix bug等各种笼统的message司空见怪,这就导致后续代码维护成本特别大,有时自己都不知道自己的fix bug修改的是什么问题。基于以上这些问题,我们希望通过某种方式来监控用户的git commit message,让规范更好的服务于质量,提高大家的研发效率。

规范建设
初期我们在互联网上搜索了大量有关git commit规范的资料,但只有Angular规范是目前使用最广的写法,比较合理和系统化,并且有配套的工具(IDEA就有插件支持这种写法)。最后综合阿里巴巴高德地图相关部门已有的规范总结出了一套git commit规范。
commit message格式

(>): >

  • type(必须): 用于说明git commit的类别,只允许使用下面的标识。
    • feat:新功能(feature)。
    • fix/to:修复bug,可以是QA发现的BUG,也可以是研发自己发现的BUG。
      • fix:产生diff并自动修复此问题。适合于一次提交直接修复问题
      • to:只产生diff不自动修复此问题。适合于多次提交。最终修复问题提交时使用fix
    • docs:文档(documentation)。
    • style:格式(不影响代码运行的变动)。
    • refactor:重构(即不是新增功能,也不是修改bug的代码变动)。
    • perf:优化相关,比如提升性能、体验。
    • test:增加测试。
    • chore:构建过程或辅助工具的变动。
    • revert:回滚到上一个版本。
    • merge:代码合并。
    • sync:同步主线或分支的Bug。
  • scope(可选): scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。例如: 在Angular,可以是location,browser,compile,compile,rootScope, ngHref,ngClick,ngView等。如果你的修改影响了不止一个scope,你可以使用*代替。
  • subject(必须): subject是commit目的的简短描述,不超过50个字符。
    • 建议使用中文(感觉中国人用中文描述问题能更清楚一些)。
    • 结尾不加句号或其他标点符号。
根据以上规范git commit message将是如下的格式:
fix(DAO):用户查询缺少username属性 feat(Controller):用户查询接口开发

以上就是我们梳理的git commit规范,那么我们这样规范git commit到底有哪些好处呢?
  • 便于程序员对提交历史进行追溯,了解发生了什么情况。
  • 一旦约束了commit message,意味着我们将慎重的进行每一次提交,不能再一股脑的把各种各样的改动都放在一个git commit里面,这样一来整个代码改动的历史也将更加清晰。
  • 格式化的commit message才可以用于自动化输出Change log。

总结
编码规范、流程规范在软件开发过程中是至关重要的,它可以使我们在开发过程中少走很多弯路。Git commit规范也是如此,确实也是很有必要的,几乎不花费额外精力和时间,但在之后查找问题的效率却很高。作为一名程序员,我们更应注重代码和流程的规范性,永远不要在质量上将就。

【如何规范你的Git commit()】References
  • 如何规范你的Git commit?
  • 使用 webhook 自动更新博客

    推荐阅读