哈士奇的工作原理是啥?

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 installnpm add huskyyarn install、...)在 .git/hooks 目录中创建/更新 git 挂钩。如果挂钩是通过 git 命令触发的,则会触发来自 husky 的脚本,该脚本将根据您用于安装的包管理器执行命令。如果你使用 npm npx --no-install husky-run $hookName "$gitParams" 会被执行。该命令查看您的配置并执行为钩子定义的命令。

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

【讨论】:

感谢您的回答。这很有趣,安装东西会运行任意代码,这是一个潜在的安全风险。我问是因为我试图用纯 git 重现这种行为,但这是不可能的。最后我找不到在克隆时将钩子复制到 .git/hooks 的方法,所以我将它们放在自述文件中并让用户手动安装它。再次感谢 @geckos:是的,存在一定的安全风险。但话又说回来:检查和构建 any 软件存在潜在的安全风险,因为几乎所有构建系统都允许执行任意外部命令(即任意代码执行)。所以无论如何你都不应该构建不受信任的软件。

以上是关于哈士奇的工作原理是啥?的主要内容,如果未能解决你的问题,请参考以下文章

你评论,我赠书~哈士奇赠书 - 14期-〖人人都离不开的算法-图解算法应用〗参与评论,即可有机获得

你评论,我赠书~哈士奇赠书 - 13期-〖Python程序设计-编程基础Web开发及数据分析〗参与评论,即可有机获得

4G模块,wifi模块是啥,工作原理是啥

Sqoop工作原理是啥?

JDBC的工作原理是啥?

HTTP协议工作原理是啥 HTTP协议工作原理介绍【详解】