9

https://github.com/typicode/husky能够自动运行 git 钩子,它们可以在自己的存储库中的团队之间共享。

这怎么可能奏效?由于钩子需要在.git/hooks其中未添加到存储库中。

它是否包装git命令和拦截命令,在它们发生时运行钩子?

我想在不需要依赖 npm 或 node 的情况下为 python 和 php 项目重现这种行为。

4

2 回答 2

8

从版本 5开始,准确地说是husky使用 git 。这是一步一步完成的。core.hooksPath git config core.hooksPath .huskyhusky install

由于包含脚本.husky创建的文件夹,它将在提交之前运行。默认情况下,它将包含在其中,但您可以根据自己的意愿对其进行编辑。husky installpre-commitnpm test

你可以在任何项目中做类似的事情。只需在.githooks其中添加文件夹和挂钩文件(检查 .git/hooks 以获取示例文件)。但是您必须git config core.hooksPath .githooks在克隆存储库时运行(或第一次设置挂钩)。你可以有一些初始化脚本来做到这一点。
npm在这种情况下,可以在其scripts.prepare上运行命令。npm installhusky install

于 2021-03-24T17:33:15.863 回答
4

在安装 husky 依赖项时(通过npm install, npm add husky, yarn install, ...)git 钩子在 .git/hooks 目录中创建/更新。如果挂钩是通过 git 命令触发的,则会触发来自 husky 的脚本,该脚本将根据您用于安装的包管理器执行命令。如果你使用 npmnpx --no-install husky-run $hookName "$gitParams"被执行。该命令查看您的配置并执行为钩子定义的命令。

它就像 git hooks 的代理。代理安装一次,每次都由普通的 git 钩子执行。如果它被执行,它会查看配置并执行那里定义的命令。

于 2020-05-14T13:34:50.333 回答