gec*_*kos 18 git githooks husky
https://github.com/typicode/husky能够自动运行 git hooks,以便在存储库中的团队之间共享它们。
这怎么可能行得通呢?由于挂钩需要位于.git/hooks未添加到存储库中的位置。
它是否包装git命令和拦截命令,并在命令发生时运行挂钩?
我想为 python 和 php 项目重现此行为,而不需要依赖 npm 或 node。
suc*_*ror 19
从版本 5 开始,准确地说husky使用 git 。这是分步完成的。core.hooksPath git config core.hooksPath .huskyhusky install
由于.husky创建的文件夹husky install包含pre-commit脚本,因此它将在提交之前运行。默认情况下它会包含npm test在其中,但您可以根据自己的意愿对其进行编辑。
您可以在任何项目中做类似的事情。只需.githooks在其中添加文件夹和挂钩文件(检查 .git/hooks 中的示例文件)。但是您必须git config core.hooksPath .githooks在克隆存储库(或第一次设置挂钩)时运行。您可以使用一些初始化脚本来执行此操作。
npm在本例中, has which 可以在其scripts.prepare上运行命令。npm installhusky install
当安装 husky 依赖项时(通过npm install、npm add husky、yarn install、 ...),会在 .git/hooks 目录中创建/更新 git hook。如果通过 git 命令触发挂钩,则会触发 husky 的脚本,该脚本将根据您用于安装的包管理器执行命令。如果使用npmnpx --no-install husky-run $hookName "$gitParams"则执行。该命令会查看您的配置并执行为该钩子定义的命令。
它就像 git hooks 的代理。代理安装一次,每次都通过普通的 git hook 执行。如果执行,它会查看配置并执行其中定义的命令。