哈士奇如何工作?

How husky works?

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

这怎么行得通?由于挂钩需要位于 .git/hooks 中,因此不会添加到存储库中。

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

我想为 python 和 php 项目重现此行为,而不需要依赖 npm 或节点。

虽然安装了 husky 依赖项(通过 npm installnpm add huskyyarn install、...)git 挂钩在 . git/hooks 目录。如果通过 git 命令触发挂钩,则会触发来自 husky 的脚本,该脚本将根据您用于安装的包管理器执行命令。如果你使用 npm npx --no-install husky-run $hookName "$gitParams" 被执行。该命令查看您的配置并执行为那里的挂钩定义的命令。

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

从版本 5 开始,husky 使用 git 的 core.hooksPath git config core.hooksPath .husky 是准确的。这是在 husky install 步骤中完成的。

由于 husky install 创建的 .husky 文件夹包含 pre-commit 脚本,因此在提交前将是 运行。 默认情况下,它会包含 npm test,但您可以根据需要对其进行编辑。

您可以在任何项目中做类似的事情。只需添加 .githooks 文件夹并在其中挂钩文件(检查 .git/hooks 以获取示例文件)。但是你必须 运行 git config core.hooksPath .githooks 在克隆 repo(或第一次设置挂钩)时。您可以使用一些初始化脚本来执行此操作。
npmscripts.prepare 可以 运行 在 npm install 上发出命令,在这种情况下是 husky install