项目git commit时卡主不良代码:husky让Git检查代码规范化工作

这篇具有很好参考价值的文章主要介绍了项目git commit时卡主不良代码:husky让Git检查代码规范化工作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

看完 《前端规范之Git工作流规范(Husky + Commitlint + Lint-staged) 前端规范之Git工作流规范(Husky + Commitlint + Lint-staged) - Yellow_ice - 博客园》,再次修改本文

团队人一多,提交一多,还是要对备注加以区分,好快速找到变更点。这时候就需要对每次提交,需要输入message,对提交的备注进行规范化处理

  • 代码规范落地难:归根结底在于需要工具去强行保证代码必须经过代码开发规范的扫描;

  • 低质量代码带入线上应用:最好的方式本地进行commit的时候,最起码需要保证当前代码能够满足团队制定的开发规范,如果不通过,commit都无法成功,这样能够从最源头保证代码质量问题;

  • 代码格式难统一:需要一种工具强制保证团队内代码的格式是一致;

  • 代码质量文化难落地:通过引入代码质量工具,在开发过程中能够时刻对自身代码质量进行约束,逐渐培养自身对代码质量有“洁癖”的开发观念,同时也会成为团队乃至自身对质量文化落地的一个抓手。

要想防患于未然,防止将存在潜在问题的代码带到线上环境,最好的办法是在本地提交代码时就能够扫描出潜在的错误,并强制将其修改后才能提交,这样就不会将问题代码携带到线上,就能保证线上代码至少不会存在低级的程序错误。

有些同学可能会把ESLint、Stylelint或Commitizen提示的错误忽视不见,直接将代码提交到代码仓库中。这样做的话,那么其他同学在pull代码并diff代码时可能会出现大段代码标红,同时在进行CI时又可能因为代码风格或规范问题被打回重改。

如何让大家在提交代码时需要确保本地的代码或Commit Message已经通过检查才能够push到代码仓库,从而更好的保障代码质量呢?

可以用 Husky + Commintlint + Lint-staged打造规范的Git检查工作流,确保我们的代码只有符合规范才能提交到代码仓库

什么是git hook

git hook,也就是常说的Git钩子。

 

Git能在特定的重要动作发生时触发自定义脚本。有两组这样的钩子:客户端的和服务器端的。

  • 客户端钩子由诸如提交和合并这样的操作所调用

  • 服务器端钩子作用于诸如接收被推送的提交这样的联网操作

客户端钩子我们可能用的比较多,客户端钩子通常包括了提交工作流钩子、电子邮件工作流钩子和其它钩子。这些钩子通常存储在项目的.git/hooks目录下,我们需要关注的主要是提交工作流钩子。提交工作流钩子主要包括了以下四种:

  • pre-commit该钩子在键入提交信息前运行。 它用于检查即将提交的快照。如果该钩子以非零值退出,Git 将放弃此次提交,你可以利用该钩子,来检查代码风格是否一致。

  • prepare-commit-msg:该钩子在启动提交信息编辑器之前,默认信息被创建之后运行。 它允许你编辑提交者所看到的默认信息。

  • commit-msg:该钩子接收一个参数,此参数存有当前提交信息的临时文件的路径。 如果该钩子脚本以非零值退出,Git 将放弃提交,因此,可以用来在提交通过前验证项目状态或提交信息。

  • post-commit:该钩子一般用于通知之类的事情。

在上面的钩子中,我们需要关注pre-commit和commit-msg钩子。

Commit message 格式

每次提交,Commit message 都包括三个部分:header,body,footer

Git 提交备注规范

  • feat: 新增 feature

  • fix: 修复 bug

  • docs: 仅仅修改了文档,比如 README, CHANGELOG, CONTRIBUTE等等

  • style: 仅仅修改了空格、格式缩进、逗号等等,不改变代码逻辑

  • refactor: 代码重构,没有加新功能或者修复 bug

  • perf: 优化相关,比如提升性能、体验

  • test: 测试用例,包括单元测试、集成测试等

  • chore: 改变构建流程、或者增加依赖库、工具等

  • revert: 回滚到上一个版本

Git分支与版本发布规范

  • 基本原则:master为保护分支,不直接在master上进行代码修改和提交。

    开发日常需求或者项目时,从master分支上checkout一个feature分支进行开发或者bugfix分支进行bug修复,功能测试完毕并且项目发布上线后,将feature分支合并到主干master,并且打Tag发布,最后删除开发分支。分支命名规范:

  • 分支版本命名规则:分支类型 _ 分支发布时间 _ 分支功能。比如:feature_20170401_fairy_flower

    • 时间使用年月日进行命名,不足2位补0

    • 分支功能命名使用snake case命名法,即下划线命名。

    • Tag包括3位版本,前缀使用v。比如v1.2.31。Tag命名规范:

    • 新功能开发使用第2位版本号,bug修复使用第3位版本号

    • 核心基础库或者Node中间价可以在大版本发布请使用灰度版本号,在版本后面加上后缀,用中划线分隔。alpha或者belta后面加上次数,即第几次alpha:v2.0.0-alpha.1、v2.0.0-belta.1

  • 分支类型包括:feature、 bugfix、refactor三种类型,即新功能开发、bug修复和代码重构

版本正式发布前需要生成changelog文档,然后再发布上线

这些规范讲出来,但是大家不一定完全遵守。所以,需要对每次提交加钩子,镜像验证

Husky

husky是常见的git hook工具,使用husky可以挂载Git钩子,当我们本地进行git commit或git push等操作前,能够执行其它一些操作,比如进行ESLint检查,如果不通过,就不允许commit或push。

具体参看:Husky - Git hooks

husky 运行:

并在package.josn里添加如下命令

"prepare": "husky install"

运行完会生成.husky文件夹,在.husky文件夹下有一个pre-commit,这个文件是用来定义git commit之前应该执行什么命令,默认内容如下

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

#npm test
#自定义命令,手动添加
npm run lint:eslint
npm run lint:stylelint

你可以进行自定义命令,来进行提交前的校验

lint-staged

默认情况下上面的命令会对所有的代码进行校验,这无疑是非常浪费时间的。这时候我们需要借助 lint-staged

来对暂存的 git 文件运行校验

具体查看:lint-staged - npm

在package.json 里添加如下代码

{
  "lint-staged": {
    "src/**/*.{less,scss,css}": [
      "stylelint --fix --syntax=less",
      "git add ."
    ],
    "src/**/*.{js,ts,tsx,vue}": [
      "eslint ./src  --ext .js,.tsx,.ts,.vue --cache --fix",
      "git add ."
    ]
  },
  "scripts": {
    "lint": "eslint --fix src",
    "lint:style": "stylelint --fix ./**/*.{scss,css,vue} --custom-syntax",
    "prepare": "husky install"
  },
  "devDependencies": {
    "@blueking/eslint-config-bk": "^2.1.0-beta.6",
    "@blueking/stylelint-config-bk": "^2.0.0",
    "@commitlint/cli": "^17.0.3",
    "@commitlint/config-conventional": "^17.0.3",
    "bk-vision-cli": "^4.0.4",
    "husky": "^8.0.1",
    "lint-staged": "^13.0.3",
  }
}

创建 commitlint.config.js

在根目录下创建 . commitlint.config.js

module.exports = {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'type-enum': [
      2,
      'always',
      [
        'feature',
        'feat',
        'bug',
        'fix',
        'bugfix',
        'refactor',
        'perf',
        'style',
        'test',
        'docs',
        'info',
        'format',
        'merge',
        'depend',
        'chore',
        'del',
      ],
    ],
    'subject-valid': [2, 'always'],
  },
  plugins: [
    {
      rules: {
        'subject-valid'({ subject }) {
          console.log('it is a subject', subject);
          return [
            /^[\s\S]+?(issue\s+#\d+)$/i.test(subject),
            'commit-msg should end with (issue #{issueId})',
          ];
        },
      },
    },
  ],
};

工程结构如下:

项目git commit时卡主不良代码:husky让Git检查代码规范化工作

eslint

增加.eslintrc.js扫描规则:(.eslintrc.js)

module.exports = {
  root: true,
  extends: ['@blueking/eslint-config-bk/tsvue3'],
  rules: {
    'no-param-reassign': 0,
    '@typescript-eslint/naming-convention': 0
  }
};

style-lint

增加style-lint 规则(.stylelintrc.js)

module.exports = {
  defaultSeverity: 'error',
  extends: ['@blueking/stylelint-config-bk']
}

prettierr

增加.prettierrc.js文件,用于在扫描通过后格式化代码(该步骤可选,如果不引入prettier的话,相应的在package和eslintrc中去除掉相应配置即可)

module.exports = {
  printWidth: 80,
  semi: true,
  singleQuote: true,
  trailingComma: 'none',
  bracketSpacing: true,
  jsxBracketSameLine: false,
  arrowParens: 'avoid',
  requirePragma: false,
  proseWrap: 'preserve'
};

加了钩子后提交:git commit -m "XXX",发现提交不了,报错

commit提交的时候报错

下面是常见的错误

zsh: no matches found

因为没有此配置:因为zsh缺省情况下始终自己解释这个 *.h,而不会传递给 find 来解释。

  1. vi ~/.zshrc

  2. 插入(i) :etopt no_nomatch

  3. 保存退出(ese,qw)

  4. 执行:source .zshrc

husky > pre-commit hook failed (add --no-verify to bypass)

提交代码的时候,pre-commit(客户端)钩子,它会在Git键入提交信息前运行做代码风格检查。如果代码不符合相应规则,则报错,而它的检测规则就是根据.git/hooks/pre-commit文件里面的相关定义。

解决办法:

  • 进入项目的.git文件夹(文件夹默认隐藏,可先设置显示或者命令ls查找),再进入hooks文件夹,删除pre-commit文件,重新git commit -m 'xxx' git push即可。

  • 将git commit -m "XXX" 改为 git commit --no-verify -m "XXX"

参考文章:

eslint+husky+prettier+lint-staged提升前端应用质量 :eslint+husky+prettier+lint-staged提升前端应用质量 - 简书

husky介绍及使用 GitHook 工具 —— husky介绍及使用 - 较瘦 - 博客园

GitHook 工具 —— husky介绍及使用 GitHook 工具 —— husky介绍及使用 - 较瘦 - 博客园

前端规范之Git工作流规范 Husky + lint-staged 前端规范之Git工作流规范 Husky + lint-staged_@我不认识你的博客-CSDN博客_git lint-staged

转载本站文章《项目git commit时卡主不良代码:husky让Git检查代码规范化工作》,
请注明出处:项目git commit时卡主不良代码:husky让Git检查代码规范化工作 - git使用的的一些日常小结合集 - 周陆军的个人网站文章来源地址https://www.toymoban.com/news/detail-436746.html

到了这里,关于项目git commit时卡主不良代码:husky让Git检查代码规范化工作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • git commit 时报错:husky - pre-commit hook exited with code 1 (error)

    在使用 git 进行 commit 时出现错误:husky - pre-commit hook exited with code 1 (error)。 chatgpt 的回答是: 报错信息 “husky - pre-commit hook exited with code 1 (error)” 表示在执行 Git 提交操作时,pre-commit 钩子脚本返回了非零的退出码,表示出现了错误。 这种情况下,通常是由于 pre-commit 钩子脚

    2024年02月13日
    浏览(34)
  • 使用pre commit钩子再git commit时报错“husky - pre-commit hook exited with code 1 (error)”

    使用husky配置git commit规范 1.我们在使用 npx husky install ,初始化之后,项目 根目录 下会出现 .husky 文件夹 2.npx husky add .husky/pre-commit \\\'npx lint-staged’命令是为了在git提交的时候,使用lint-staged格式化代码 我们发现在pre-commit 文件中已经自动生成如下内容: 但是两次执行git commit时控制

    2024年02月11日
    浏览(40)
  • git提交报错:husky - pre-commit hook exited with code 1 (error)

    提交代码的时候,提交错误了… 无论是使用 idea 自带的工具还是直接使用命令行都会报错 很明显报错信息: husky - pre-commit hook exited with code 1 (error) 部分人可以成功(我就不行…) 由于项目使用了husky,在提交前对代码规范进行了校验,导致报错

    2024年02月11日
    浏览(56)
  • git提交终端报husky - pre-commit hook exited with code 1 (error)

    今天像往常一样正常提交代码不知道哪里出了问题 终端“抽风”了 我没提交成功 报错如下 然后就开始找解决方法 看到最多的是commit时加上提交信息 :\\\"fix:xxxx\\\" 然后我就试了一下 发现并没有用 欸 咋整捏 (ps: 这个方法我用了之后没用 不代表他就是错的呀 可能是错误不太一样

    2024年02月11日
    浏览(43)
  • git提交时报错:husky-commit-msg hook exited with code 1 (error)

    ​问题描述: git commit 时控制台报错: 由于项目使用了husky,在提交前对代码规范进行了校验,导致报错 这种情况下无法直接push o(╥﹏╥)o ​ 解决方案: commit 时加上提交信息:“fix: xxxxx”,比如: 提交后就可以顺利push了 O(∩_∩)O ​

    2024年02月11日
    浏览(37)
  • 【已解决】使用 husky、commitlint 后 git commit 报错:No staged files match any configured task.

    git commit 报错:No staged files match any configured task. 这就涉及到 git hooks 了,熟悉的小伙伴自不用多说,不熟悉的可以看一下官方文档:Git - Git 钩子 如果报错中有 husky 、 commitlint 这样的眼,那就是前端项目中使用了这两种 npm 插件, husky 的配置文件在如下截图位置: 最粗

    2024年02月09日
    浏览(43)
  • idea提交git项目,提交代码 点击commit一闪而过,没有反应的解决办法

    如果存在此情况点击红框位置把不同的编码设置成一样即可,不会对程序功能有影响,只是对换行符有修改。为保证之后的操作不受影响可以选择按照下面的操作步骤进行设置: file settings editor Code Style 找到line separator (for new file):设置成你想要的编码格式即可,如下图: 对

    2024年02月03日
    浏览(42)
  • 配置 Git Husky 代码提交约束

    Git Husky 是一个可以管理 Git Hooks 的工具,它可以帮助我们在代码提交的时候运行脚本,以确保代码提交符合特定的规范和约定。 在 Git 中,允许在操作特定的事件时执行特定的脚本,这些事件我们称之为 Hooks 。 Git Husky 利用这些 Hooks 实现了在代码提交前、提交信息规范校验等

    2024年02月03日
    浏览(33)
  • VSCode/SourceTree等GUI界面操作Git时,使用nvm,husky pre-commit中npm等命令command not found的解决方案

    报错 npm command not found in PATH: ... 因为GUI环境中启动husky,没有npm、nvm、node的PATH环境变量,需要跟配置bash、zsh等终端一样进行环境的配置 创建 ~/.huskyrc 或者export PATH=“$PATH:${node的路径}”

    2024年02月04日
    浏览(34)
  • Vue3+Vite项目配置husky、stylelint、commitlint,实现git提交前代码校验

    做什么:本文将从零开始带你配置 husky 、 stylelint ,完成代码提交git前的强制校验,保证代码风格和一致性 技术栈:Vue3 + TypeScript + Vite 1.1 node.js v16.0.0 及以上 (我 v16.14.1) 1.2 pnpm v8.0.0 及以上(我 v8.6.6) 2.1 安装 pnpm 2.2 创建项目-不多赘述 3.1 安装 eslint 3.2 生成eslint配置文件

    2024年02月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包