alias: husky
tags:
- git/hooks
- 开发工具
references: - https://zhuanlan.zhihu.com/p/366786798
- https://github.com/typicode/husky/blob/main/docs/index.md
husky 是一个[[git hooks]]的封装,增强了[[git hooks]]的开发体验
❓ 为什么有了 [[git hooks]] 还需要husky
由于传统的项目使用 [[git]] 作为项目的分支管理工具,位于.git
文件夹中的文件无法在不同的设备之中进行同步,因此.git/hooks
文件夹中的 [[git hooks]] 在项目中无法在成员之间共享,[[husky]] 实现了.git/hooks
的文件同步,并将 [[git hooks]] 重定向到.husky
文件夹中进行管理,解决了不同成员中的 [[git hooks]] 在 [[git]] 中的同步问题,为统一的开发阶段管理以及代码管理打好基础。
版本迭代
[[husky]] 自开发起有两个大的版本更新,且两个版本之间是破坏性更新,表明两个版本之间是不兼容的。
在 [[husky]] v6.0.0 中做了破坏性更新,放弃了基于package.json
配置的工作原理,转向符合npm最佳实践)的工作原理,使用prepare
脚本配置实现husky
并利用core.hooksPath
重定向 [[git hooks]] 的存储路径,实现更加可信的管理。
具体优势可以参考,Why husky doesn’t autoinstall anymore 以及 Why husky has dropped conventional JS config
使用方式
由于v6.0.0之前的版本不被推荐使用,这里仅解释新版本的使用方式。
在使用 npm install husky
在项目中安装好 [[husky]] 后,使用 npx husky init
进行项目的初始化。至此已经完成 [[husky]] 的安装,并且使用默认方式初始化了所有 [[git hooks]],其中包括 [ ‘pre-commit’, ‘prepare-commit-msg’, ‘commit-msg’, ‘post-commit’, ‘applypatch-msg’, ‘pre-applypatch’, ‘post-applypatch’, ‘pre-rebase’, ‘post-rewrite’, ‘post-checkout’, ‘post-merge’, ‘pre-push’, ‘pre-auto-gc’ ]
可以通过修改 .husky
中的以上 hooks 文件进行各种操作。
如果需要在执行 hooks 之前执行其他操作,可以通过 ~/.config/husky/init.sh
或者 $XDG_CONFIG_HOME/husky/init.sh
实现。
临时弃用
通过设置环境变量 HSUKY
的值为0可以在执行 [[git hooks]] 时临时禁用 [[husky]]。例如:
HUSKY=0 git ... # 临时禁用 husky