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

故事背景

在上一个项目组,团队强制要求使用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
相关推荐
L耀早睡16 分钟前
mapreduce打包运行
大数据·前端·spark·mapreduce
HouGISer29 分钟前
副业小程序YUERGS,从开发到变现
前端·小程序
outstanding木槿35 分钟前
react中安装依赖时的问题 【集合】
前端·javascript·react.js·node.js
霸王蟹1 小时前
React中useState中更新是同步的还是异步的?
前端·javascript·笔记·学习·react.js·前端框架
霸王蟹1 小时前
React Hooks 必须在组件最顶层调用的原因解析
前端·javascript·笔记·学习·react.js
专注VB编程开发20年1 小时前
asp.net IHttpHandler 对分块传输编码的支持,IIs web服务器后端技术
服务器·前端·asp.net
爱分享的程序员2 小时前
全栈项目搭建指南:Nuxt.js + Node.js + MongoDB
前端
趁你还年轻_2 小时前
记录一次git提交失败解决方案
git
隐含3 小时前
webpack打包,把png,jpg等文件按照在src目录结构下的存储方式打包出来。解决同一命名的图片资源在打包之后,重复命名的图片就剩下一个图片了。
前端·webpack·node.js
lightYouUp3 小时前
windows系统中下载好node无法使用npm
前端·npm·node.js