git

git提交信息规范

Posted by steven on January 20, 2015

使用Git时,每次提交代码,都要写 Commit message(提交说明),否则git就不允许提交本次改动。

$ git commit -m "msg"

msg就是提交说明,默认个情况下写什么都行。但是一般情况下,应该简述下本次改动的内容和影响的范围。 目前有多种填写规范,但是使用最广的还是Angular规范

Commit Message 的格式 —

包括三部分,Header,Body和Footer

<type>(<scope>): <subject>
// 换行
<body>
// 换行
<footer>

Header 是必需的,Body和Footer可以省略。尽量不要让每行超过72个字符,避免显示时换行影响美观。

Header包括三个字段:type(必需)、scope(可选)和subject(必需)

type用来说明本次提交的类型,只能使用以下7种中的一种:

feat新功能feature
fix修补bug
docs文档documentation
style 格式不影响代码运行的变动
refactor重构即不是新增功能也不是修改bug的代码变动
test增加测试
chore构建过程或辅助工具的变动

scope用来说明本次改动的影响范围,如业务模块,类,界面等

subject用来简单说明下本次改动,最好不要超过50个字。尽量以第一人称动词开头,结尾不加。好。第一个单词的首字母小写。

Body

Body 是对本次 commit 的详细描述,可以分成多行,如:

.Fix small typo in docs widget (tutorial instructions)
.Fix test for scenario.Application - should remove old iframe
.docs - various doc fixes
.docs - stripping extra new lines
.Replaced double line break with single when text is fetched from Google
.Added support for properties in documentation

body也是用第一人称来书写,应该说明本次提交的动机,以及和之前的对比

footer只有两种情况需要书写

1.不兼容的改动

若本次改动与上次改动不兼容,则footer应该以BREAKING CHANGE开头,后面加上变动的理由,描述和迁移的方法。如:

Before:

   scope: {
     myAttr: 'attribute',
     myBind: 'bind',
     myExpression: 'expression',
     myEval: 'evaluate',
     myAccessor: 'accessor'
   }

   After:

   scope: {
     myAttr: '@',
     myBind: '@',
     myExpression: '&',
     // myEval - usually not useful, but in cases where the expression is assignable, you can use '='
     myAccessor: '=' // in directive's template change myAccessor() to myAccessor
   }

2.关闭 Issue

若本次改动关闭了某个或多个Issue,那应该在footer中加以描述。如:

Closes #123, #245, #992

特殊状况:

1.Revert

如果当前 commit 用于撤销以前的 commit,则应该以revert:开头,后面跟着被撤销 Commit 的 Header。如;

revert: feat(view): add 'width' option

This reverts commit 667ecc1654a317a13331b17617d973392f415f02.

2.merge branch 和 修改冲突,git 会自动生成 commit msg.忽略就行了

验证

可以使用git hooks来验证commit msg。每次提交的时候都会触发commit-msg的git hook.只需要在.git/hooks下的commit-msg文件中编写校验规则的shell脚本。提交代码的时候会自动执行改脚本,校验commit msg是否符合规范。

git hookhai还还支持python,python支持正则表达式,所以在mac或Linux可以直接使用python和正则表达式来验证commit msg。在windows上也可以,但是需要在windows上先安装python。

validate-commit-msg

validate-commit-msg是一个用来验证commit msg是否合规的脚步,用JS编写。需要配合ghooks使用。比较适合WEB前端开发。具体使用方法参看对应的说明。