哈士奇的工作原理是啥?
Posted
技术标签:
【中文标题】哈士奇的工作原理是啥?【英文标题】:How husky works?哈士奇的工作原理是什么? 【发布时间】:2019-12-09 08:49:32 【问题描述】:https://github.com/typicode/husky 能够自动运行 git 挂钩,以便在自己的存储库中的团队之间共享它们。
这怎么可能?由于钩子需要在.git/hooks
中,它没有添加到存储库中。
它是否包装git
命令并拦截命令,并在它们发生时运行钩子?
我想在不需要依赖 npm 或 node 的情况下为 python 和 php 项目重现这种行为。
【问题讨论】:
你看过源代码吗?我不是 javascript 专家,但在我看来,husky 会在您安装钩子时安装它。 我正在尝试。在github.com/typicode/husky/blob/… 似乎在上面的链接中复制了createHook
的钩子。这似乎发生在npm install
时间而不是git clone
。如果我想让它在 python 或 php 项目上运行,我需要在 pip 包或 composer 包中使用类似的东西
【参考方案1】:
从版本 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
。您可以使用一些初始化脚本来执行此操作。npm
具有 scripts.prepare
,它可以在 npm install
(在本例中为 husky install
)上运行命令。
【讨论】:
【参考方案2】:在安装 husky 依赖项时(通过npm install
、npm add husky
、yarn install
、...)在 .git/hooks 目录中创建/更新 git 挂钩。如果挂钩是通过 git 命令触发的,则会触发来自 husky 的脚本,该脚本将根据您用于安装的包管理器执行命令。如果你使用 npm npx --no-install husky-run $hookName "$gitParams"
会被执行。该命令查看您的配置并执行为钩子定义的命令。
它就像 git hooks 的代理。代理安装一次,每次都由普通的 git 钩子执行。如果它被执行,它会查看配置并执行其中定义的命令。
【讨论】:
感谢您的回答。这很有趣,安装东西会运行任意代码,这是一个潜在的安全风险。我问是因为我试图用纯 git 重现这种行为,但这是不可能的。最后我找不到在克隆时将钩子复制到 .git/hooks 的方法,所以我将它们放在自述文件中并让用户手动安装它。再次感谢 @geckos:是的,存在一定的安全风险。但话又说回来:检查和构建 any 软件存在潜在的安全风险,因为几乎所有构建系统都允许执行任意外部命令(即任意代码执行)。所以无论如何你都不应该构建不受信任的软件。以上是关于哈士奇的工作原理是啥?的主要内容,如果未能解决你的问题,请参考以下文章
你评论,我赠书~哈士奇赠书 - 14期-〖人人都离不开的算法-图解算法应用〗参与评论,即可有机获得