当前位置: 首页 > Web前端 > JavaScript

使用husky7.0规范Git提交

时间:2023-03-26 23:25:47 JavaScript

大家好,我是前端小河,希望通过自己的学习输出对大家有所帮助。背景在一个完整的工作流程中,Gitcommit规范是必不可少的。Git提交规范包括哪些内容?我觉得应该包括代码质量检查和commitmessage验证。我们使用husky来添加我们上面的需求:husky使用Githooks(下面有常见的Githooks)在githook函数中做一些事情(比如pre-commit,commit-msg)。以下为官方介绍:ModernnativeGithooksmadeeasy声明:我们使用的husky版本为7.0及以上。安装完husky后,打开项目根目录,执行`npminstallhusky--save-dev,前提是生成的package.jsonnpminstallhusky--save-dev我们按照官方文档进行huskyinstall:注意:这里的npm版本必须是7.1及以后的(https://github.com/npm/cli/re...)npmset-scriptprepare"huskyinstall"npmrunprepareaddeslinthook下面配置eslint验证npxhuskyadd.husky/pre-commit"npmrunlint"gitadd.husky/pre-commit上面我们为什么可以配置npmrunlint?因为我们的package.json文件中的脚本中包含了lint:{"scripts":{"lint":"vue-cli-servicelint"}}ok,至此我们在提交代码,到时候会验证一下,让我们尝试:gitcommit-m"verify">webpack-vue@2.1.0lint>vue-cli-servicelintDONE没有发现lint错误!如上,我们是在提交lint脚本的时候执行的。添加commit-msghook接下来,我们限制提交消息规范。我们需要采用npm社区中@commitlint/cli和@commitlint/config-conventional这两个成熟的依赖包。@commitlint/cli用于在命令行提示用户信息@commitlint/config-conventional是提交消息规范接下来我们安装下面两个包,并添加相关的配置文件:npminstall@commitlint/cli@commitlint/config-conventional--save-devecho"module.exports={extends:['@commitlint/config-conventional']}">commitlint.config.jsok,至此我们可以验证提交消息中的内容,让我们测试一下:gitcommit-m"1">webpack-vue@2.1.0lint>vue-cli-servicelint--modeproduction以下文件已自动修复:src/utils/secret.js完成所有lint错误自动修复.npm呃!取消了npmERR!可以在以下位置找到此运行的完整日志:npmERR!/Users/hsm/.npm/_logs/2022-04-26T02_21_07_564Z-debug.loghusky-commit-msghookexitedwithcode1(error)如上,我们在commitmessage中随便写了点什么,验证通过。让我们修改我们的提交信息并重新提交:gitcommit-m"docs:Addhuskyrelated">webpack-vue@2.1.0lint>vue-cli-servicelint--modeproductionDONENolinterrorsfound![committestb61be77]docs:Addhusky相关1filechanged,2insertions(+)Ok,success~Commitspecification关于gitcommitmessage提交规范,可以参考RuanYifeng的Commitmessage和Changelog编写指南。在VSCode中,我们使用ConventionalCommits插件进行commit提交。Githookspre-commitgitcommit可以通过gitcommit--no-verifybeforecommit-msggit绕过。commit执行前可以用gitcommit--no-verify绕过post-commitgitcommit执行不影响gitcommitpre-merge-commit的结果gitmerge可以用gitmerge--no-verifybeforeexecution绕过.执行prepare-commit-msggitcommit后,打开编辑器前,pre-rebase,执行gitrebase前,post-checkout,执行gitcheckout或gitswitch后,如果不带--no-checkout参数used,在gitclone之后也会执行。执行完post-mergegitcommit后,执行gitpull时也会调用。执行gitpush之前的pre-push。最后,你们的每一个点赞和评论,都是对我坚持写作最大的支持!另外,希望各位小伙伴可以和我交流讨论。如有不妥之处,还望批评指正!我是前端的小河,希望通过自己的学习输出对大家有所帮助。