【git规范--husky的使用】

news/2024/7/4 7:48:53 标签: git, 代码规范

git_0">git提交规范

一、 前言

在团队开发中,或者自己的项目中,我们都会用到git来管理我们的代码,但是当我们commit(git commit)的时候,是没有规范的,有的时我们偷懒甚至git commit -m'..',这种提交虽然当时爽,但如果有一天我们需要回滚版本的时候,git relog,妈耶,这都是啥啊,如果在团队开发中这种情况更让人绝望。这时候,指定制定一套commit规范显得格外重要,我们可以借助huskyCommitizen这两个工具帮助我们来管理commit

二、2. Husky

定义

  • git有自己的hooks(钩子),其实就是类似于vue的生命周期
    • 比如在提交代码前,会调用pre-commit hook
    • 如果不好理解hook,那么你就想vue中,页面加载时会先调用created函数,当commit的时候会先调用pre-commit,这么一举例是不是好理解点,如果还是不理解,没关系,先用,后面有机会在理解
  • 这些hook都在.git/hooks中以.sample结尾的文件就是hook
  • 如果我们手动调用,那么就会很麻烦,所以husky这个工具就孕育而生,对,这个工具就是让我们调用这些git hook简单点

安装

  • npx husky-init && npm install

  • 上面的命令会帮我们做以下的操作(官网给的解释,可以了解即可)

    1. package.jsonscript中添加"prepare": "husky install",
    2. 在当前根目录创建.husky文件夹,并且在当前文件夹中创建一个pre-commit的文件
      1. 这个文件其实就是一个可执行文件,他的作用就是commit之前会调用这个文件
    3. 配置git hook的路径

使用

  • 当我们执行git commit时,就会先执行pre-commit文件的内容了

  • 我们可以在其中添加添加自己的命令,比如npx eslint

  • 意思是commit之前先用eslint来检查代码

  • #!/usr/bin/env sh
    . "$(dirname -- "$0")/_/husky.sh"
    
    npx eslint
    

添加hook

  • 上面说到在安装的时候会帮我们创建一个pre-commithook文件,那么我们自己想要添加一个hook该怎么做呢,比如我们想要添加一个在commit时候执行的hook

  • git hook 官网写的很清楚哦,这里就不再细述每个hook是干嘛的了。git 钩子

  • 做法很简答,执行以下命令即可

  • 解读一下其实也不难

  • npx husky add .husky/commit-msg 使用husky在.husky文件夹下添加是commit-msg的钩子

  • 'npx --no -- commitlint --edit "$1"' 表示在调用该hook时候要执行的命令

  • 所以通用命令是npx husky add .husky/钩子 '命令'

npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'

三、 Commitizen

定义和规范

  • 这是一个规范我们提交代码的工具

规范

Type作用
feat新增特性 (feature)
fix修复 Bug(bug fix)
docs修改文档 (documentation)
style代码格式修改(white-space, formatting, missing semi colons, etc)
refactor代码重构(refactor)
perf改善性能(A code change that improves performance)
test测试(when adding missing tests)
build变更项目构建或外部依赖(例如 scopes: webpack、gulp、npm 等)
ci更改持续集成软件的配置文件和 package 中的 scripts 命令,例如 scopes: Travis, Circle 等
chore变更构建流程或辅助工具(比如更改测试环境)
revert代码回退

安装

# 安装Commitizen
npm install commitizen -D
# 安装cz-conventional-changelog,并且初始化cz-conventional-changelog
npx commitizen init cz-conventional-changelog --save-dev --save-exact

使用

  • 安装完毕后,之后我们要用npx cz来代替git commit

    • 安装完毕后会在node_modules/bin创建一个cz的可执行文件
  • 执行npx cz会依次出现以下的选项

  • # 选择一个此次commit的类型
    1.Select the type of change that you're committing: 
    # 此次commit影响的文件有哪些 比如我这次提交只是修改a.vue中的某个东西 那么就只影响到a.vue
    2.What is the scope of this change (e.g. component or file name):
    # 简短的描述一下这次具体的改动最多91个字符
    3. Write a short, imperative tense description of the change (max 91 chars)
    # 详细的描写一下你的改动 如果没有按空格键跳过
    4.Provide a longer description of the change: (press enter to skip)
    # 这次改动是重大的改动吗 (比如发布了大的版本)
    5.Are there any breaking changes? 
    # 这次改动修复了别人提交的issues(这个选项针对开源项目,写n即可)
    6.Does this change affect any open issues? 
    
  • 完成以上的步骤你的commit才算是完成

修改commitizen提交指令

  • 如果不想每次都是用npx cz,有的人会感觉别扭,或者记不住

  • 这时候可以在package.jsonscript添加一个指令

  • {
      "script": {
        commit: "cz"
      }
    }
    
  • 这样我们就可以使用npm run commit来代替git commit

四、代码提交验证

  • 上面我们虽然规范了代码提交的风格,但是我们commit的时候不按照该规范依然可以提交成功,那么这时候这个就成了防君子不防小人了,团队中难免有漏网之鱼(哈哈哈~)
  • 所以我们还需要通过commitlint来限制提交

安装

  • npm i @commitlint/config-conventional @commitlint/cli -D
    

使用

  • 步骤一:在根目录添加commitlint.config.js文件

  • 步骤二:配置文件

  • // 我们这里直接继承官方给的默认规则,如果想要更改,自动查
    module.exports = {
      extends: ['@commitlint/config-conventional']
    }
    
  • 步骤三:使用husky生成commit-msg(这是commit时的hook)文件,验证提交信息:

  • npx husky add .husky/commit-msg "npx --no-install commitlint --edit $1"
    
  • 现在我们commit的时候如果不符合规范是无法commit哦

注意

如果遇到commitlint.config.js is treated as an ES module file as it is a .js file...这个错误,是因为在package.json文件中添加了 "type": "module",将这个属性删除即可,或者将js文件的后缀改为.cjs即可,因为"type": "module"这个属性是表示该项目都要用es module的方式导出导入


http://www.niftyadmin.cn/n/349379.html

相关文章

《程序员面试金典(第6版)》面试题 02.06. 回文链表(双指针(快慢指针),查找链表中间节点,反转链表)

题目描述 编写一个函数,检查输入的链表是否是回文的。 题目传送门~:面试题 02.06. 回文链表 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进…

【MySQL】-【数据库的设计规范】

文章目录 为什么需要数据库设计范式范式简介范式都包括哪些键和相关属性的概念第一范式(1st NF)第二范式(2nd NF)第三范式(3rd NF) 反范式化概述应用举例反范式化的新问题反范式的适用场景 BCNF(巴斯范式)案例 为什么需要数据库设计 范式 范式简介 在关系型数据库中&#xff…

v-model使用及原理

关于v-model,vue2与vue3用法不一致,本文学习采用了vue3官网文档。与vue2区别写在本文末尾。一、为什么使用v-model? v-model指令可以在表单input、textarea以及select元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素…

可视化翻转教学python

目录 第1关 绘制折线图 第2关 绘制正弦曲线 第3关 绘制指定线型、颜色和标记的正弦曲线 第4关 定义绘制正余弦函数曲线的函数 第5关 绘制坐标轴并设置范围 第1关 绘制折线图 显示绘制结果 plt.show():用于显示绘制的结果,无参数,执行此…

mysql子查询嵌套

目录 前言 一、实际需求解决 1.方式1:自连接 2.方式2:子查询 二、单行子查询 1.操作符子查询 三、相关子查询 四、自定义语句 五、子查询的问题 1.空值问题 2.非法使用子查询 六、多行子查询 七、聚合函数的嵌套使用 八、多行子查询空值问题…

LeetCode高频算法刷题记录8

文章目录 1. 零钱兑换【中等】1.1 题目描述1.2 解题思路1.3 代码实现 2. 最小栈【最小栈】2.1 题目描述2.2 解题思路2.3 代码实现 3. 最长有效括号【困难】3.1 题目描述3.2 解题思路3.3 代码实现 4. 从前序与中序遍历序列构造二叉树【中等】4.1 题目描述4.2 解题思路4.3 代码实…

【牛客刷题专栏】0x29:JZ31 栈的压入、弹出序列(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录 前言问…

物联网时代,从智能咖啡机到车联网都可能被黑!

"伴随5G明年即将正式商转,物联网(IoT)时代特有的“万物皆联网”景况也近在咫尺,届时x连网对象数量将呈现猛爆增长。物联网技术的前期采用者,除了加速物联网基础建设与创新技术应用导入之外,也面临更广泛的安全管理风险与更严…