一身反骨的我,用一句代码绕开了代码提交限制!

故事背景

在上一个项目组,团队强制要求使用git rebase而不能使用gitmerge

参考这篇文章:直接使用git pull拉取代码,被同事狠狠地diss了!

新的团队虽然没有这个要求,但突然给代码增加了git提交验证(在提交代码之前或之后进行检查,以确保提交符合特定的标准或规则)。

从代码规范来说,git提交验证是非常有必要的,但是我们这个项目很老了,经过很多人,突然增加git提交验证非常蛋疼

以前的一些不规范代码,一些异常情况,难道还要我去修复兼容么?最难受的,我提交代码,node_modules还有代码兼容问题!

这让我如何容忍!于是二话不说,我使用--no-verify 跳过了git代码提交检查。

再介绍这个命令之前,我先介绍下git提交验证的一些基础知识。

Git Hooks

Git Hooks 是 Git 提供的一种机制,可以特定的事件发生时自动执行自定义脚本或命令,比如代码提交时,进行代码格式化、验证提交信息等。

常用的钩子函数有下面三个:

  • pre-commit:在执行 git commit 命令之前运行,可以用来检查代码风格、运行测试等。
  • commit-msg:在提交信息被输入后但提交被保存之前运行,可以用来验证提交信息的格式。
  • pre-push:在执行 git push 之前运行,可以用来确保代码符合一定标准,或阻止推送不合适的代码。

通过再这些钩子里写入一些代码,就可以在git不同阶段做一些处理。

创建一个简单的 pre-commit Hook

比如,我们可以写一个脚本,用于提醒开发者删除代码中的console.log 语句。

进入 .git/hooks 目录

js 复制代码
cd .git/hooks

创建 pre-commit 文件

js 复制代码
touch pre-commit

pre-commit 文件

js 复制代码
nano pre-commit

添加脚本(例如,检查代码中是否存在调试语句):

js 复制代码
#!/bin/sh

if grep -r "console.log" .; then
  echo "Error: Please remove all console.log statements before committing."
  exit 1
fi

保存并退出,然后为脚本添加执行权限:

js 复制代码
chmod +x pre-commit

现在,我们每次提交代码时,Git 会在提交前运行这个 pre-commit 脚本。如果脚本发现 console.log 语句,提交将被阻止,并显示错误信息。

使用工具管理 Git Hooks

从上面的代码我们可以看出,自定义git hooks是非常麻烦的,因此,我们可以使用一些git工具,它们可以简化 Git Hooks 的管理。

  • Husky:一个流行的工具,可以将 Git Hooks 集成到项目中,并通过 npm 管理。适用于 JavaScript 项目。
  • pre-commit:一个用于管理和共享 Git Hooks 的框架,支持多种语言。

这些工具可以让我们的 Git Hooks 配置变得很容易。

我们公司使用的就是Husky

提交代码时,pre-commit被执行,最终触发

npx lint-staged

lint-staged 是一个在提交代码时,仅对文件执行代码检查和格式化的工具,通常与Husky结合使用

本文就不介绍husky的使用了,感兴趣的大家可以自己百度。

如何绕开代码检查

想要绕开代码检查,最彻底的方法应该就是删除相关的检查代码了,比如我们公司使用的husky,删除它即可。

但,代码是公共的,删除文件显示不可行,这样肯定会被领导一顿臭骂!最简单的就是使用--no-verify

--no-verify 是 Git 提交命令中的一个选项,用于跳过 Git Hooks 的执行。使用这个选项时,Git 将不会运行与提交相关的 Hook,例如 pre-commitcommit-msgpre-push

比如

跳过 pre-commit commit-msg Hooks

js 复制代码
git commit -m "嘿嘿,我要跳过检查" --no-verify

跳过 pre-push Hook

js 复制代码
git push --no-verify

我用来解决我项目中遇到的问题试试:

加了--no-verify效果显著啊!

注意:

--no-verify 没有简写;在日常开发中不建议频繁使用,跳过验证可能会导致不符合标准的代码进入代码库,或提交信息不符合团队规范(废话啊,用的时候一定是被迫的)。

总结

本文简单介绍了Git Hooks的一些基础知识,同时,最重要的介绍了跳过git提交检查的指令,就一句代码:

js 复制代码
git commit -m "嘿嘿,我要跳过检查" --no-verify
相关推荐
y先森36 分钟前
CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow
前端·css·css3
前端Hardy36 分钟前
纯HTML&CSS实现3D旋转地球
前端·javascript·css·3d·html
susu108301891139 分钟前
vue3中父div设置display flex,2个子div重叠
前端·javascript·vue.js
IT女孩儿2 小时前
CSS查缺补漏(补充上一条)
前端·css
让生命变得有价值2 小时前
使用 helm 部署 gitlab
gitlab·helm
Kkooe2 小时前
GitLab|GitLab报错:PG::ConnectionBad: could not connect to server...
gitlab
吃杠碰小鸡3 小时前
commitlint校验git提交信息
前端
虾球xz3 小时前
游戏引擎学习第20天
前端·学习·游戏引擎
我爱李星璇3 小时前
HTML常用表格与标签
前端·html