一直是ESLint的忠实用户,深知规范的重要性。然而,在新的项目转换中,我被GitCommit规范逼疯了。我这才意识到自己的疏忽,于是萌生了探个究竟的念头。1.为什么需要规范?没有规则就没有圆,编程也一样。如果你有一个项目,你从头到尾都是自己写的,你想怎么写就怎么写,谁也不能干涉。但是如果每个人都在团队合作中表现出自己的个性,那么代码就会乱七八糟,一个好的项目也会毁于一旦。无论是开发还是以后的维护,都会是一场灾难。这时候有人提出为什么不统一标准,大家都按照这个标准来做。于是,ESLint、JSHint等代码工具如雨后春笋般涌现,成为项目建设的必备产品。GitCommit规范可能没有那么夸张,但如果你在版本回滚时看到很多错误的提交,恐怕你会很生气。所以,严格遵守规范,利人利己。2、具体规则先来看一下公式:():type用来描述commit的类型,只允许有以下7个标志。feat:newfunction(特性)fix:fixbugdocs:documentation(文档)style:format(不影响代码运行的变化)refactor:重构(不是新特性,也不是修改bug的代码变化)test:addtestschore:The构建过程或辅助工具中的变更范围用于说明commit影响的范围,如数据层、控制层、视图层等,视项目而定。subject是对提交目的的简短描述,不超过50个字符。以动词开头,使用***人称现在时,如change、notchanged或changes,最后一个小写字母结尾没有句号(.)3.异常处理先来看看这个异常提示:INVALIDCOMMITMSG:doesnotmatch"():"!jartto:fixbug这里报这个warning的原因是因为我的提交有两个问题:一是使用了规范之外的关键字;第二,一个很详细的问题,jartto:末尾少了一个空格;才想起来当时一直提交失败,迫于无奈直接提交,所以以后的提交都会抛出这个异常。大致意思就是:你之前的Commit不合格~你之前的Commit不合格~你之前的Commit不合格这时候就很烦人了,我们只能改正之前的错误,那怎么操作呢?四、如何修改之前的commit信息?其实并不复杂,我们只需要这样做:1.暂存与当前分支gitstash2无关的工作状态。将HEAD移动到需要修改的提交处。gitrebase9633cf0919^--interactive3。找到需要修改的commit,将第一行的pick改成edit4,开始解决你的bug5,gitadd将修改后的文件添加到暂存6,gitcommit–amendappendthechangestothesubmission7,gitrebase–continuemoveHEADback***的commit8,恢复之前的工作状态gitstashpopdone,是不是要重新修改整个Commit,escape~5,在项目中使用这时候,问题又来了,为什么会有警告当我提交时,如何做到这一点?这时候我们就需要一个Node插件validate-commit-msg来检测项目中的Commit消息是否规范。1、首先安装插件:npminstall--save-devvalidate-commit-msg2。使用方法1,创建一个.vcmrc文件:{"types":["feat","fix","docs","style","re??factor","perf","test","build","ci","chore","re??vert"],"scope":{"required":false,"allowed":["*"],"validate":false,"multiple":false},"warnOnFail":false"maxSubjectLength":100,"subjectPattern":".+","subjectPatternErrorMsg":"subjectdoesnotmatchsubjectpattern!","helpMessage":"","autoFix":false}3.使用方法二:写package.json{"config":{"validate-commit-msg":{/*yourconfighere*/}}}4.但是如果我们想自动使用ghookshook函数呢?{..."config":{"ghooks":{"pre-commit":"gulplint","commit-msg":"validate-commit-msg","pre-push":"maketest","post-merge":"npminstall","post-rewrite":"npminstall",…}}…}我们可以在ghooks中做很多事情,当然不仅仅是validate-commit-msg对于更多细节请参考:validate-commit-msg6.Commit规范的作用提供更多信息,方便故障排除和回滚;过滤关键词,快速定位;促进文档生成;7.如上所述生成Changelog如果我们的提交符合规范,那就很简单了。生成的文档包括以下三个部分:新功能错误修复重大更改。每个部分将列出相关的提交并具有指向这些提交的链接。当然,生成的文档允许手动修改,所以你可以在发布之前添加其他内容。这里需要使用ConventionalChangelog这个工具来生成Changelog:npminstall-gconventional-changelogcdjartto-domoconventional-changelog-pangular-iCHANGELOG.md-w为了方便,可以写到package.json的scripts字段中。{"scripts":{"changelog":"conventional-changelog-pangular-iCHANGELOG.md-w-r0"}}这样用起来很简单:npmrunchangelog到这里,我们所有的问题都清楚了,🍻干杯~8.总结看完文章,你还会这么放荡不羁吗?你还会随心所欲地写Commit吗?你还会这样提交gitcommit-m"hellojartto"吗?答案是否定的,因为使用没有钩子函数,你就没有机会,否则会无穷无尽的回收Commit。这样可以养成良好的提交习惯~~