发布于 2026-01-06 0 阅读
0

使用 Husky 配置 Git Hooks

使用 Husky 配置 Git Hooks

苏马里奥

  1. 引言
  2. O que são Git Hooks?
  3. Quando esses Hooks são 正常吗?
  4. O que é Husky?
  5. Instalando o Husky
  6. Criando o primeiro Hook com 预提交
  7. 钩子 com 预推
  8. Criando o segundo Hook com 预推送
  9. 结论

Olá, pessoas!

Gostaria de compartilhar um pouco do que andei estudando sobre Git Hooks com Husky na primira publicação aqui.

Antes de tudo, vamos contextualizar um pouco。

O que são Git Hooks?

第二篇Git 官方文档,Git Hooks:

脚本个性化是一个重要的问题。

Esses Hooks/Scripts 可以为服务提供者提供不同的服务。

Quando esses Hooks são 正常吗?

没有客户端: quando ocorre alguma operação de commit ou merge
没有服务器: quando ocorre alguma operação de rede (como Push , por exemplo)。

Mas isso não é regra!

Você pode utilizar esses Hooks para qualquer ação que julgar importante e/ou necessária :)

Git 的专用 API 允许在不使用任何项目的情况下使用独立的 Hooks 技术。

使用 Node/Npm 生态的项目(作为客户端或服务器),使用Husky来配置 Hooks。

Se quiser saber um pouco mais sobre o funcionamento desses Hooks por baixo dos panos, recomendo este artigo maravilhoso do Willian Justen 😉

Ta, mas o que é Husky?

É uma raça de cachorros peludos e fofos 🐶

官方存储库、Husky 和 ​​JavaScript 库一起使用,可以为预想的git commitgit push和 mais 提供服务!

在 Husky 上,可以配置 Hooks 来package.json进行项目和比较时间。

使用 Git 的方式,将 Hooks 配置为直接.git项目(不是版本),然后使用该功能。

啊啊啊,哈士奇太有用了! Eu não sabia disso 😱 Descobri enquanto lia este artigo do Cubos.io

A seguir, vamos ver como adicionar Hooks de pre-commit e pre-push com o Husky ⚡⚡

观察:关于 Husky 和 ​​Hooks 的辅助信息,对于 Node/Npm 项目来说很重要,请在 arquivopackage.json和 Git 中进行初始化 :)


Então, bora fazer!

第一次与哈士奇一起安装,是与发展相关的。
接下来,执行后续命令并执行项目:



npm install husky --save-dev


Enter fullscreen mode Exit fullscreen mode

你的



yarn add -D husky


Enter fullscreen mode Exit fullscreen mode

Feito isso,você vai perceber que uma linha foi adicionada nas devDependenciesdo seu package.json,conforme exibido abaixo:



  "devDependencies": {
    ...
    "husky": "^4.2.5"
  }


Enter fullscreen mode Exit fullscreen mode

您可以查看官方文档(英文)或Hostinger中的Hooks 待办事项描述列表葡萄牙语)😗✌️

Rapidamente falando, os Hooks que usaremos são:
pre-commit=> é invocado quando um git commité executado, antes da escrita do commit.
pre-push=> 调用并git push执行,环境承诺。

通常,使用 Hooks 来进行投影和使用testeslint可以使用这些示例。


Criando o primeiro Hook com 预提交!

观察:与 Husky ficam 的 Hooks 配置husky.hooks一样package.json

如果您想要执行该命令script执行此操作,并始终使用该命令来提交,并允许执行书面提交lintnpm run lintyarn lint

Neste caso,basta chamar o npm run lint(ou yarn lint) no Hook de pre-commitdo Husky,conforme exemplificado abaixo:



{
  "name": "my-project",
  "scripts": {
    ...
    "lint": "eslint . --ext .js,.jsx"
  },
  "devDependencies": {
    ...
    "husky": "^4.2.5"
  }
  "husky": {
    "hooks": {
      "pre-commit": "npm run lint"
    }
  }
}


Enter fullscreen mode Exit fullscreen mode

Caso queira adicionar outro scriptpara ser executado no pre-commit, basta adicioná-lo na frente do npm run lintum &&entre eles。
示例:



  "husky": {
    "hooks": {
      "pre-commit": "npm run lint && npm run test"
    }
  }


Enter fullscreen mode Exit fullscreen mode

普罗蒂尼奥! Com isso, os dois scriptsserão executados quando alguém tentar fazer um commitno projeto 😊

O 问题做预推

请注意前面的内容,以便在没有计划的情况下pre-push执行script之前的push任务。

Mas, pesquisando um pouco sobre o pre-push, me deparei com este artigo do Kacper Wdowik

基本原理是,我的pre-push想法是,以执行项目的睾丸为例。

Acontece que, normalmente, ao rodar npm run testé levado em thinkação todos os arquivos modificados localmente no projeto; ou seja,请考虑 arquivos/linhas que ainda não foram "commitados"。

这是一个与睾丸相关的关系和一致的感觉,是最重要的、最重要的。嗯卡索 不 tãoIncomum seria os testes passarem porque um arquivo foi corrigido mas não está nos arquivos para subir com o push, o que poderia resultar em um erro em produção numa sexta-feira à noite例如👀

解决方案如下:如果您HEAD在本地进行项目比较,请允许push您将commits所有已修改的项目进行实际操作,并确保您的 Hook 骑行已完成que vão, de fato, subir。

可以选择的选项:

  1. 允许作为 pessoas desenvolvedoras façam pushquando alguma linha ou arquivo não esteja“commitado”,sabendo que o scriptexecutado no pre-push pode não estar em concordância com o que está,de fato,subido;
  2. 阻碍作为 pessoas desenvolvedoras façam pushquando alguma linha 或 arquivo não esteja “commitado” 和 ter aconfiança de que o scriptexecutado no pre-push esteja em concorância com o que está, de fato, subindo。

Eu, pessoalmente, prefiro a segunda opção, mas isso vai de cada projeto 😊

Criando o segundo Hook com 预推送

为什么在Husky使用预推送 Git Hooks 并不总是一个好主意

Ficaria algo assim:



{
  "name": "my-project",
  "scripts": {
    ...
    "lint": "eslint . --ext .js,.jsx",
    "test": "npm run jest"
  },
  "devDependencies": {
    ...
    "husky": "^4.2.5"
  }
  "husky": {
    "hooks": {
      "pre-commit": "npm run lint",
      "pre-push": "git diff HEAD --quiet && npm run test && npm run lint"
    }
  }
}


Enter fullscreen mode Exit fullscreen mode

请注意,没有任何例子,但HEAD与实际工作相比。 Caso Sejam iguais,继续执行。相反,如果出现错误,请终止执行。

Utilizando esta abordagem, caso tente rodar um git pusharquivos modificados apenas localmente (sem "commitar"), você pode se deparar com uma mensagem de erro semelhante a esta:

替代文字

--no-verify如果没有任何问题,请不要执行任何附加指令git push,请注意不要忽略它,并
选择将“commitar”作为修改和重新调整操作,以确保您的push首选评论 lá em cima (removendo o git diff HEAD --quiet &&)。

Feito isso, seus Hooks de commit and push já vão estar funcionando para todo mundo que mexer no projeto :D

结论

总体来说,Git Hooks com 的 Husky 是一个简单而简单的解决方案,允许您轻松访问这些内容。

实施示例很简单,可以scripts在没有项目的情况下进行操作。您可以通过scripts手动操作来查看 Hooks。

假装 um pouco sobre a criação de scriptsmanente em um artigo futuro, focado unicamenteneste ponto, que tende a ser um pouco mais Complexo e deixaria este artigo muito longo xD

请注意,建议使用lint-staged来帮助组织和可视化执行scriptsHooks lintdo Husky 的操作。

如果您想了解更多使用优势lint-staged,请参阅Evellyn Lima建议,以了解最实用的示例pre-commitlint-staged

啊,Git 中的 Hooks 是如何使用的,您可以决定是否使用 Hooks 来创建项目的工作流程 😉

Qualquer dúvida、sugestão、correção、commentário 等,我不使用TwitterLinkedin,我永远不会这样做 ✌️

文章来源:https://dev.to/helendias/configurando-git-hooks-com-husky-43ne