GitLab是由
GitLab Inc.
开发,一款基于Git
的完全集成的软件开发平台(fully integrated software development platform)。另外,GitLab且具有wiki以及在线编辑、issue跟踪功能、CI/CD 等功能。
一、概念
要说清楚提交的概念,首先要清楚git的工作原理,最基本的要理解三个区:工作区、暂存区、本地仓库(其实还有一个远程仓库,暂时用不到),传送门。假如你弄清楚了以上这些概念,那git提交其实就是把暂存区的内容提交到仓库,简单一个git commit -m 'commit message'
就够了,当然这不是此文的重点。Git每次提交代码,都要写commit message
,否则就不允许提交,用过Git都知道这一点。可能因为各种原因比如公司硬性要求等,或者纯粹的就是为了能通过提交,很多人就按照自己的方式去那么干了。
博主从毕业到现在5年多时间了,前后经历过几家大大小小的公司,见过五花八门各种各样的提交信息,说不上好坏对错,就只是觉得应该有一个相对来说比较规范的东西出来。GG一下关于git提交的文章太多了,大多都是相互copy and paste
一下,包括此篇。好习惯是慢慢养成的,可以从很小的一件事情做起,比如简单的一次提交,Let's do it !
二、提交规范
commit message
的作用- 提供更多的历史信息,方便快速浏览。
- 过滤某些commit,便于快速查找信息。
- 基于commit生成change log。
commit message
的格式
每次提交,
commit message
都包括三个部分:header,body和footer,其中header
是必需的,body
和footer
可以省略。另外,为了避免自动换行影响美观,不管是哪一个部分,任何一行都不得超过72个字符(或100个字符)。
1 | <type>(<scope>): <subject> |
header
:这部分只有一行,包括三个字段:type
(必需)、scope
(可选)和subject
(必需)。type
用于说明commit
的类别,只允许使用下面7个标识:feat
:新功能(feature
)fix
:修补bug
docs
:文档(documentation
)style
: 格式(不影响代码运行的变动)refactor
:重构(既不是新增功能,也不是修改bug
的代码变动)test
:增加测试chore
:构建过程或辅助工具的变动如果
type
为feat
和fix
,则该commit
将肯定出现在change log
之中,其他情况你定。
scope
用于说明commit
影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。subject
是commit
目的的简短描述,不超过50个字符。- 以动词开头,使用第一人称现在时,比如change,而不是changed或changes
- 第一个字母小写
- 结尾不加句号
.
body
:这部分是对本次commit的详细描述,可以分成多行,有两点注意:- 使用第一人称现在时,比如使用change而不是changed或changes。
- 应该说明代码变动的动机,以及与以前行为的对比。
footer
:这部分只用于两种情况:不兼容变动和关闭Issue
。- 不兼容变动:如果当前代码与上一个版本不兼容,则
footer
部分以BREAKING CHANGE
开头,后面是对变动的描述、以及变动理由和迁移方法。 - 关闭
Issue
:如果当前commit
针对某个issue,那么可以在footer
部分关闭这个issue
,也可以关闭多个issue
。
- 不兼容变动:如果当前代码与上一个版本不兼容,则
特殊情况:Revert,如果当前
commit
用于撤销以前的commit
,则header
必须以revert:
开头,后面跟着被撤销commit
的header
。body
部分的格式也是固定的,必须写成This reverts commit <hash>.
,其中的hash
是被撤销commit
的SHA
标识符。
三、工具
- Commitizen,用于撰写一个合格
commit message
的工具。 - validate-commit-msg,用于检查
Node
项目的commit message
是否符合格式。
四、demo
1 | fix(ngRequired): set error correctly when inside ngRepeat and false by default |
五、自定义提交信息
- 切换到某个目录
cd ~ && mkdir templates && touch {custom}_template
- 编辑模板
vim {custom}_template
,可根据项目情况自定义提交信息,如
1 | Desc:本次提交的描述信息,一般建议50字以内 |
切换到项目目录
cd your_project
设置提交模板
git config commit.template {custom}_template
指定编辑器
git config core.editor vim
测试提交
git commit
后会自动弹出vim编辑框git commit -m 'msg'
,也可自定义提交信息