300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > husky实现git commit规范

husky实现git commit规范

时间:2019-05-02 21:06:27

相关推荐

husky实现git commit规范

本文首发于个人博客网址:/posts/husky-commit-rule

开发中如何统一git commit规范,对项目的开发和维护以及问题的回溯都很有效果,接下来看看如何实现commit信息规则的校验

commitlint校验commit信息

多人协作开发的时候,友好的commit信息对于项目开发人员来说非常重要,这时候commitlint就派上用场了,commitlint是来检测提交信息的格式是否符合规范

常用的commitlint模版

type(scope?): subjectbody?footer?

多个作用域

commitlint支持多个作用域,常用的分隔符选项有

"/""\"","

commit规范的制定和使用

我们不仅可以使用社区的规范@commitlint/config-conventional,也可以自定义规范

常用的社区commit规范有

@commitlint/config-angular@commitlint/config-conventional@commitlint/config-lerna-scopes@commitlint/config-patternplateconventional-changelog-lint-config-atomconventional-changelog-lint-config-canonicalcommitlint-config-jira

社区规范引入方法,在项目根目录下新建commitlint.config.js文件

// commitlint.config.jsmodule.exports = {extends: [[email protected]/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-yjshash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-yjsemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> *//config-conventional'], // => commitlint/config-conventional};

也可以使用自定义规范,通过相对路径引入

// commitlint.config.jsmodule.exports = {extends: ['./config.js'], // => ./config.js};

自定义commit规则的配置如下

// config.jsmodule.exports = {/** 继承自@commitlint/config-conventional@commitlint/config-conventional*/extends: ['@commitlint/config-conventional'],/** 使用@commitlint/format格式化*/formatter: '@commitlint/format',/** 重新自定义校验规则*/rules: {'type-enum': [2, 'always', ['foo']],},/** 排除校验情况*/ignores: [(commit) => commit === ''],/** commitlint默认排除规则*/defaultIgnores: true,/** 展示commit错误求助链接,配置无效* commitlint --help-url=""*/helpUrl:'/conventional-changelog/commitlint/#what-is-commitlint',/** 提示输入*/prompt: {messages: {},questions: {type: {description: 'please input type:',},},},};

相应的规则链接

灵活的自定义检测插件

由于官方的检测规则有点死板,有时需要更加灵活的限制,可以通过commitlint插件来解决,首先安装依赖commitlint-plugin-function-rules

npm install --save-dev commitlint-plugin-function-rules

修改commitlint.config.js文件

module.exports = {// extends: [[email protected]/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-yjshash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-yjsemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> *//config-conventional'],plugins: ['commitlint-plugin-function-rules'],rules: {'header-max-length': [0],'function-rules/type-enum': [2,'always',(parsed) => {if (!['AA', 'BB'].includes(parsed.type)) {return [false, '必须以JIRA号(AA/BB)作为开头'];}return [true];},],},};

自定义commit模板

官方自带的模版必须是以:规范来写commit信息的,如果我们想自定义commit模板,可以通过parserPreset配置来实现,例如以空格为分割符,可以这样实现

parserPreset: {parserOpts: {headerPattern: /^([feat|hotfix].*)\s(.*)/,headerCorrespondence: ['type', 'subject']}},

husky使用

husky可以在git commit的钩子处理相关的操作,比如执行单元测试,代码lint,代码commit检测等。使用方法如下

npm install husky --save-dev

在根目录下执行

npm set-script prepare "husky install"npm run prepare

比如新增一个pre-commit钩子,执行单元测试

npx husky add .husky/pre-commit "npm test"git add .husky/pre-commit

比如新增一个commit-msg钩子,执行commit信息格式检测

npx husky add .husky/commit-msg "npx commitlint --edit $1"

至此,就可以实现在git commit时进行commit信息的格式检测

相关资料

/#//vidavidorra/commitlint-plugin-function-rules/package/husky

本文为原创,未经授权,禁止任何媒体或个人自媒体转载

本文由博客一文多发平台 OpenWrite 发布!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。