使用 Husky 配置 Git Hooks
苏马里奥
- 引言
- O que são Git Hooks?
- Quando esses Hooks são 正常吗?
- O que é Husky?
- Instalando o Husky
- Criando o primeiro Hook com 预提交
- 钩子 com 预推
- Criando o segundo Hook com 预推送
- 结论
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 commit、git 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
你的
yarn add -D husky
Feito isso,você vai perceber que uma linha foi adicionada nas devDependenciesdo seu package.json,conforme exibido abaixo:
"devDependencies": {
...
"husky": "^4.2.5"
}
您可以查看官方文档(英文)或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 来进行投影和使用testes,lint可以使用这些示例。
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"
}
}
}
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"
}
}
普罗蒂尼奥! 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。
可以选择的选项:
- 允许作为 pessoas desenvolvedoras façam
pushquando alguma linha ou arquivo não esteja“commitado”,sabendo que oscriptexecutado nopre-pushpode não estar em concordância com o que está,de fato,subido; - 阻碍作为 pessoas desenvolvedoras façam
pushquando alguma linha 或 arquivo não esteja “commitado” 和 ter aconfiança de que oscriptexecutado nopre-pushesteja 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"
}
}
}
请注意,没有任何例子,但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 等,我不使用Twitter或Linkedin,我永远不会这样做 ✌️
文章来源:https://dev.to/helendias/configurando-git-hooks-com-husky-43ne
