规范化团队 git 提交信息

同一个工程项目,为了方便管理,git 的 commit 信息最好按照一定的格式规范,以便在需要的时候方便使用。什么是方便的时候,比如出现了一个线上 bug,所以需要回滚操作,知道了提交信息可以方便的定位问题。代码 review 的时候也知道了该次 commit 干了什么,所以 commit 标准化好处很多,不再举例。

实现

可以马上想到的是利用 shell 结合 git hook 实现在 git commit 阶段检查输入是否符合规范。符合就通过,不符合就终止,并给出提示信息。

规范是什么

常见的分类有下面几种:

  • build:修改项目的的构建系统(xcodebuild、webpack、glup等)的提交
  • ci:修改项目的持续集成流程(Kenkins、Travis等)的提交
  • chore:构建过程或辅助工具的变化
  • docs:文档提交(documents)
  • feat:新增功能(feature)
  • fix:修复 bug
  • pref:性能、体验相关的提交
  • refactor:代码重构
  • revert:回滚某个更早的提交
  • style:不影响程序逻辑的代码修改、主要是样式方面的优化、修改
  • test:测试相关的开发

轮子

在 github 上有 commitlint 这个项目,它可以很方便的在工程中做配置,并允许你自定义上面说的「规范」、「分类」。

commitlint:用于检查提交信息 husky:hook 工具,用于 git-commit 和 git-push 阶段。

怎么用?

  1. 初始化一个 node 项目:npm init -y
  2. 安装所需依赖。npm install --save-dev @commitlint/config-conventional @commitlint/cli husky
  3. 在工程根目录下新建配置文件,名称为 commitlint.config.js
  4. 在 commitlint.config.js 中添加配置信息
const types = ['build', 'ci', 'chore','docs', 'feat', 'fix', 'pref', 'refactor', 'revert', 'style', 'test'];typeEnum = {rules: {'type-enum': [2, 'always', types]},value: () => types}module.exports = {extends: ["@commitlint/config-conventional"],rules: {'type-case': [0],'type-empty': [0],'scope-empty': [0],'scope-case': [0],'subject-full-stop': [0, 'never'],'subject-case': [0, 'never'],'header-max-length': [0, 'always', 72],'type-enum': typeEnum.rules['type-enum']}};

5. 在 package.json 文件中添加以下代码,代码层级跟 **devDependencies** 同级。

"husky": {"hooks": {"pre-commit": "echo '哈喽,小伙伴们,在这里可以做测试相关的逻辑哦,一般结合公司的 ci'","commit-msg": "commitlint -E HUSKY_GIT_PARAMS","pre-push": "echo 提交代码前需要先进行单元测试 && 可以做测试相关"}}

上面的流程配置完成,当你在提交 commit 信息的输入的内容,如果不符合 <type>: <subject> 规则,会终止并给出提示信息。

type 就是上面的种类;subject 就是需要提交的文字概括。比如:feature:增加摇一摇推荐酒店功能。

小说明:如果某次提交想禁用 husky,可以添加参数 --no-verifygit commit --no-verify -m "xxx"

贴个效果图

commitlint

流程说明

安装包 husky 的时候,会在目录 .git/hooks/ 下生成一堆 shell 脚本,负责 git 的 hook。

"commit-msg": "commitlint -E HUSKY_GIT_PARAMS" 这个配置告诉 git hooks,当执行 git commit -m 的时候触发 commit-msg 钩子,并通知 husky,从而执行 commitlint -E HUSKY_GIT_PARAMS,实际上执行的是 ./node_modules/husky/bin/run.js,读取 commitlint.config.js 里的配置,然后对我们 commit -m 里的字符串校验,如不通过则输出错误信息并终止。

拓展篇

git commit 的几个钩子,也暴露出来了,所以可以结合时机做一些额外的逻辑。

  • pre-commit:在 git commit 之前触发
  • commit-msg:在编写 commit 信息的时候触发
  • pre-push:在 git push 之前触发

所以基于上述时机,可以根据项目特点做一些别的事情。比如 code lint、unit test 代码覆盖率检测、changelog 自动生成、unit test 脚本等、也可以借此机会产生 lint 报表

git 只commit不push 会有影响吗_规范化团队 git 提交信息相关推荐

  1. git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区

    每天一Git之简单理解工作区和暂存区 1. 工作区与暂存区命令初体验 1.1. 暂存区文件与文件夹管理 [root@number ~]# cd GitDir/git_learning/ [root@n ...

  2. git pull 是到工作区还是暂存区_我把git想简单了

    git 是开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.我们平时可能经常使用它,但是你真的了解 git 吗?先抛几个问题 git add 发生了什么?git 有哪些暂存区 ...

  3. git 合并分支时出现的异常解决方案----蓝字,提示输入提交信息的

    Please enter a commit message to explain why this merge is necessary. 请输入提交消息来解释为什么这种合并是必要的 解决办法: 1. ...

  4. 浅谈git rebase命令 -- git修改历史提交信息

    浅谈git rebase命令 如果你只想修改git log命令打印到终端上的最后一个提交信息,那么使用git commit --amend命令直接修改就好. 如果你还想合并最近的某几个提交为一个提交, ...

  5. 你见过最奇葩的代码提交信息是什么?别再为写commit message头疼了!

    写在前面 对一个developer来说,有时候变量命名,提交代码时的提交信息会让人很头疼,本文主要聊聊怎么优雅的书写commit message. 一  你见过最奇葩的代码提交信息是什么? 曾在上家公 ...

  6. gitee项目能用SVN拉取吗_用好 Git 和 SVN,轻松驾驭版本管理

    来源 | 凌承一链接 | bubuko.com/infodetail-2844306.html 本文从 Git 与 SVN 的对比入手,介绍如何通过 Git-SVN 开始使用 Git,并总结平时工作高 ...

  7. add svn 多个文件_用好Git 和 SVN ,轻松驾驭版本管理

    一.Git vs SVN Git 和 SVN 孰优孰好,每个人有不同的体验. Git是分布式的,SVN是集中式的 这是 Git 和 SVN 最大的区别.若能掌握这个概念,两者区别基本搞懂大半.因为 G ...

  8. Git得基本使用方法add、commit、push、checkout以及Pull

    一.Git是什么? Git是目前世界上最先进的分布式版本控制系统. Working Directory:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remo ...

  9. 理解Git的设计思想,详解git文件夹,以及详解add、commit、push,fetch、pull、merge指令

    在项目目录执行git init,此目录将纳入git管理,git将会自动生成.git文件夹,用以记录git配置(.git/config)和版本信息(commit-id)和文件集合.下面是.git文件夹的 ...

最新文章

  1. 全局负载均衡与CDN内容分发
  2. 数据结构与算法-学习笔记(13)
  3. springboot默认开启事务吗_香~Spring Boot 应用也可以有配置中心。
  4. Spring Validation 最佳实践及其实现原理,参数校验没那么简单!
  5. I. Space Station(hash记忆化+dp)
  6. python db2查询_如何将DB2查询转换为python脚本
  7. solidity 十六进制字符串转十六进制bytes
  8. 给自己的网址加上https,添加ssl证书(springboot项目)
  9. php正则如何使用 1,PHP正则表达式使用详解(1)
  10. arcgis风向_[ArcGIS] 空间分析(六) 追踪分析(台风路径)
  11. SQLServer中一个多用户自动生成编号的过程
  12. Keil出现 err:Cannot read project file异常;err:点击Project闪退
  13. c语言谭浩强第八章函数PPT,清华谭浩强C语言 第8章 函数.ppt
  14. ps安装了可以打开但开始里面找不到_PS CC2017安装教程【64/32位】
  15. html中版权怎么写,HTML版权符号是怎么输入的、代表什么-京标知识产权
  16. java xlsm_在Java中使用POI框架读取xlsm文件时出错
  17. 服务器主板用什么芯片,C610芯片服务器主板用什么机箱好?
  18. PPT演讲时投影仪显示技巧:分屏演示PPT,你可同时看见备注
  19. 第五章 树16 AcWing 1628. 判断红黑树
  20. c语言中wait用法及意思,wait的用法总结大全

热门文章

  1. 腾讯云副总裁邹贤能:将陆续开源四大核心技术
  2. FFMPEG使用参数详解
  3. OpenStack vlan教程 (操作篇)
  4. redis事务原理,使用,详解
  5. 通过 crontab将linux中的top信息写入文件中
  6. leetcode 592. Fraction Addition and Subtraction | 592. 分数加减运算(最大公因数gcd,最小公倍数lcm)
  7. 【Vue】脚手架 Vue CLI 的使用
  8. 【Java语法】比较两个字符串是否相等
  9. 【教程】如何给Eclipse中添加库(jar包)
  10. PAT1046 划拳 (15 分)