序言
在项目开发过程中,通常会涉及到不同的分支,例如开发分支、测试分支和主干分支等。
一般情况下,我们不能错误地将测试分支合并到其他分支中。然而,有时候由于一些意外情况,我们可能会不小心将测试分支合并到其他分支中,并且在不知情的情况下还添加了新的代码。直到上线之后才被发现,造成的后果可大可小,并且回滚操作也很麻烦。
那么,有没有办法在合并阶段阻止合并非法分支呢?答案是可以的,使用 Git Hooks 可以实现这一点。
什么是 Git Hooks?
Git Hooks 是在执行 Git 命令的过程中会触发的自定义脚本。常用的钩子(hooks)包括:pre-commit
、commit-msg
、pre-push
等。举个例子,我们可以在 pre-commit
触发时进行代码格式验证,在 commit-msg
触发时对 commit
消息和提交用户进行验证,在 pre-push
触发时进行单元测试、e2e 测试等操作。
在执行这些脚本时,如果以非零的值退出程序,将会中断 Git 的提交/推送流程。因此,在 hooks 脚本中,当验证消息/代码不通过时,我们可以使用非零值来退出程序,从而中断 Git 的流程。
exit 1
然而,.git/hooks
无法通过 git push
推送到远程仓库,也无法通过 git pull
拉取回来。因此,在项目团队成员之间分享与同步 Git Hooks 就成了一个问题。为了解决这个问题,我们可以使用 Husky。
什么是 Husky?
Husky 是方便使用 Git Hooks 的工具,它集成了 Git Hooks 的功能,使其更加便捷。除此之外,Husky 还可以配合 commitlint
、lint-staged
等工具,用于检查提交信息的格式以及对代码进行格式化等操作。
安装 Husky
yarn add husky --dev
# or
npm install -D husky
初始化 Husky
npx husky-init
npx husky-init
命令实际上是向 package.json
文件的 scripts
中添加 prepare
脚本