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

GitCommit规范和配置

时间:2023-03-29 12:26:42 HTML

前言平时使用git的时候,提交说明都是随手写的。当发现问题时,回滚版本。看着杂乱无章的投稿须知,一下子搞不清到底投了哪些内容,苦不堪言。后来在学习过程中,体会到了Commit的规范和配置,总结了内容,分享给大家。什么是CommitmessageGit每次提交代码,都必须写Commitmessage(提交说明),否则不允许提交。上面gitcommit-m"helloworld"代码的-m参数用来指定Commit消息。如果一行写不够,直接执行gitcommit,会弹出文本编辑器,让你写多行。基本上,你可以写任何东西。但是,一般来说,Commit消息应该清晰明了,说明本次commit的目的。目前社区对Commit消息的编写有多种规范。本文介绍的是Angular规范(见上图),是目前使用最广泛的一种写法,比较合理和系统,并且有配套的工具。Commit消息的作用格式化的Commit消息有几个好处。(1)提供更多历史信息,方便快速浏览。例如,以下命令显示自上次发布以来的更改,每行一个提交。只需查看行首即可了解提交的目的。gitlog--oneline(2)可以过滤某些Commits(比如文件变更),让你可以快速的找到信息。例如,以下命令仅显示此版本中添加的新功能。gitlog--grepfeature(3)可以直接从Commit生成Changelog。ChangeLog是新版本发布时,用于说明与前一版本不同之处的文档,详见下文。Commitmessage格式对于每次提交,commitmessage包括三部分:Header、Body和Footer。其中Header是必须的,Body和Footer可以省略。()://空行//空行

HeaderHeader部分只有一行,包括三个字段:type(必填)、scope(可选)和subject(必填)).无论哪个部分,任何一行都不应超过72个字符(或100个字符)。这是为了避免自动换行的出现。type类型用来描述提交的类别。Maintypefeat:新特性(feature)修复:bugfixspecialtypedocs:仅与文档(documentation)相关的改变style:代码格式(不影响代码运行的改变)build:构造工具或外部依赖的改变,如webpack,npmrefactor:重构代码时使用revert:执行gitrevert打印更少的消息使用typeperf:性能优化(Performanceimprovement)test:测试方便的更改ci:与持续集成服务相关的更改chore:不要修改src或其他修改的测试,例如构建过程或辅助工具的更改。scope用于说明提交影响的范围,如数据层、控制层、视图层等,视项目而定。subjectsubject是对投稿目的的简短描述,不超过50个字符。BodyBody部分是对本次Commit的详细描述,可以分为多行。FooterFooter部分仅在两种情况下使用。Incompatiblechanges如果当前代码与以前的版本不兼容,Footer部分以BREAKINGCHANGE开头,然后是更改说明、更改原因和迁移方法。CloseIssue如果当前Commit是针对一个issue,您可以在Footer部分关闭该issue。关闭#234也可以一次关闭多个问题。Closes#123,#245,#992RevertRevert是一种特殊情况,用于撤消先前的Commit。它必须以revert:开头,后跟被撤销的提交的标头。revert:feat(pencil):add'graphiteWidth'选项这将恢复提交667ecc1654a317a13331b17617d973392f415f02。Body部分的格式是固定的,必须写成Thisrevertscommitcommit_idChangelogChangeLog是新版本发布时用来说明与之前版本不同的文档。包含“Feature”、“Fix”、“PerformanceImprovement”和“BreakingChanges”。如果你所有的Commit都符合Angular的格式,那么在新版本发布的时候可以用脚本自动生成Changelog,如下:installconventional-changelog-clinpminstall-gconventional-changelog-cli@2.2.2globalin你在项目根目录中执行conventional-changelog-pangular-iCHANGELOG.md-s这不会覆盖任何以前的变更日志。只有自上次发布以来的更改才会添加到CHANGELOG.md的头部。如果您是第一次使用并且想要生成所有以前的变更日志,您可以执行conventional-changelog-pangular-iCHANGELOG.md-s-r0这将覆盖任何以前的变更日志。/**配置项说明:*-pangular指定样式*-iCHANGELOG.md指定输出文件名*-s指定增量更新,不会覆盖之前的更新日志*-r0从中生成多少日志的最新版本,如果为0将重新生成日志。*/可以在项目配置文件package.json中添加脚本,方便操作。"changelog":"conventional-changelog-pangular-iCHANGELOG.md-s"生成日志如下图:Commitize配置规范格式化规范工具Commitizen可以使用Commitizen帮助我们编写规范提交信息。方法如下:安装commitizen和cz-customizablenpminstall-gcommitizen@4.2.4npminstall-Dcz-customizable@6.3.0在package.json中添加"config":{"commitizen":{"path":"node_modules/cz-customizable"}}在根目录新建.cz-config.js文件,写入配置module.exports={//optionaltypestypes:[{value:'feat',name:'feat:新功能'},{value:'fix',name:'fix:fix'},{value:'docs',name:'docs:文档更改'},{value:'style',name:'style:代码格式(不影响代码运行变化)'},{value:'refactor',name:'refactor:重构'},{value:'perf',name:'perf:performanceoptimization'},{value:'test',name:'test:addtest'},{value:'chore',name:'chore:buildprocessorhelpertoolchange'},{value:'revert',name:'revert:fallback'},{value:'build',name:'build:package'},{value:'ci',name:'ci:Changesrelatedtocontinuousintegrationservices'},],//messagestepmessages:{type:'请选择提交类型:',customScope:'请输入修改范围(可选):',subject:'请简要描述提交内容(必填):',body:'请输入详细描述(可选):',footer:'请输入要关闭的问题(可选):',confirmCommit:'确认提交与以上信息?(y/n/e/h)',},//跳过问题skipQuestions:['footer'],//主题文本长度默认为72subjectLimit:72,}你可以使用gitcz而不是gitcommitgitczcz-cli@4.2.4,cz-customizable@6.3.0除第一行外的所有行都会在100个字符后换行。?请选择提交类型:(使用方向键)>feat:newfeaturesfix:fixdocs:文档变化style:代码格式(不影响代码运行的变化)refactor:重构perf:性能优化test:添加测试?请输入修改范围(选填):?请简要描述投稿(必填):新功能xxx?请输入详细说明(可选):?请输入要关闭的问题(可选):###------------------------------------------------------###feat:新功能xxx###--------------------------------------------------------###?使用以上信息确认提交?(y/n/e/h)cz-customizable是一个shell插件,在gitbash中不能正常使用。使用Husky来执行规范不足以让我们遵守规范。项目所有开发者必须强制遵守此规范,可通过Commitlint和Husky实现,如下:安装commitlint/cli和commitlint/config-conventionalnpminstall-D@commitlint/config-conventional@12.1.4@commitlint/cli@12.1.4添加commitlint配置文件commitlint.config.js并写入配置module.exports={//继承规则extends:['@commitlint/config-conventional'],//定义规则类型rules:{//type类型定义,表示git提交的类型必须在类型范围'type-enum':[2,'always',['feat',//新特性feature'fix',//修复bug'docs',//文档注释'style',//代码格式(不影响代码运行的改变)'refactor',//重构(既不添加新功能也不修复错误)'perf',//性能优化'test',//添加测试'chore',//对构建过程或辅助工具的更改'revert',//回滚'build',//package'ci',//与持续集成服务相关的更改],],//未检查主题案例'subject-case':[0],},}installhuskynpminstall-Dhusky@7.0.1初始化huskynpxhuskyinstall将husky与commitlint关联起来,执行npxhuskyadd.husky/commit-msg在生成的commit-msg文件中写入指令(替换undefined)npx--no-installcommitlint--edit的配置完成这样。提交不符合规范时,命令行会报错gitcommit-m'helloworld'?input:helloworld?subjectmaynotbeempty[subject-empty]?typemaynotbeempty[type-empty]?发现2个问题,0个警告?获取帮助:https://github.com/conventional-changelog/commitlint/#what-is-commitlinthusky-commit-msghookexitedwithcode1(error)Onlybywritea符合规范的提交说明能否成功提交gitcommit-m'feat:newfunctionxxx'[master84d6807]feat:Newfunctionxxx3fileschanged,12insertation(+),6deletions(-)deletemode100644.husky/pre-commit结语如果文中有错误或不准确之处,请指正,万分感谢much喜欢或者受到启发,欢迎点赞关注,鼓励新作者。内容参考自:Commitmessage和Changelog编写指南commIt类型-CSDNcommit规范配置教程

最新推荐
猜你喜欢