AntChen Front-end Dev Engineer

git 提交规范

2016-11-16
git

相信很多猿都有这样的感受,对于垃圾的提交信息深恶痛绝,特别是那些提交信息为 “fix bug”的commit,SO,

如果提交的时候能有 些填写规范的提示 或者高级点有交互式的约束就好了。

这里给出两种方案,也是业界比较通用的

  1. commitizen交互式约束命令
  2. 配置git commit 模板

先来介绍第一种:(基于MAC OS 安装)

知名前端web项目AngularJS的提交记录在业内被许多人称赞,其规范同时也逐渐被大家引用,为了把这些规范实际应用到项目中,我

们就需要 commitizen这个小工具,该工具是基于Node的,因此我们首先必须先安装node环境 ,node环境好了后便可以开始安装我们的

利器了,步骤很简单:

  • npm 全局安装利器 commitizen
npm install -g commitizen
  • 安转规范模板文件

这里有个要注意的地方 规范模板文件分全局(也就是说 这个规范适用于你电脑上所有的git 项目)的和单个仓库(只针对一个git工程)的

全局安装 :

1.其中 cz-conventional-changelog 这个东西就是AngularJS的规范

npm install -g cz-conventional-changelog

2.此时你当前用户的根目录下应该可以看到一个 .czrc的文件了

echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc

然后你切换到你的git 工程下 ,在当你需要使用 git commit 的地方更换成 git cz就能显示出 commit 的交互界面

局部安装:

1.直接 cd到你的git工程下

2.安装规范文件,如果你的项目本身就是 node系列的 如 web

commitizen init cz-conventional-changelog --save --save-exact

下面有几个我们常用到的 . feat :新功能

. fix :修复bug

. doc : 文档改变

. style : 代码格式改变

. refactor :某个已有功能重构

.perf :性能优化

.test :增加测试

. build :改变了build工具 如 grunt换成了 npm

.revert: 撤销上一次的 commit

scope :用来说明此次修改的影响范围 可以随便填写任何东西,commitizen也给出了几个 如:location 、browser、compile,不过我推荐使用

all :表示影响面大 ,如修改了网络框架 会对真个程序产生影响

loation: 表示影响小,某个小小的功能

module:表示会影响某个模块 如登录模块、首页模块 、用户管理模块等等

subject: 用来简要描述本次改动,概述就好了

body:具体的修改信息 应该尽量详细

footer:放置写备注啥的,如果是 bug ,可以把bug id放入

最后生成的 commit 信息大概是这样的 简洁又明了


那现在来讲讲第二种 :git 设置模板

步骤如下:

  1. 首先建立一个模板文件 最好直接在用户根目录下建(为啥? 稍后解释)

如:建立 vim .template_git

如果 按 i 编辑 ,输入自己想要的规范 ,刚上面说了AngularJS的 commit规范很好,那我们应该模拟它的

然后保存 退出(:wq)

  1. 模板文件名, 我的模板文件是 .template_git 所有我直接
    git config --global commit.templte
    

    git config --global commit.template /Users/tao/.template_git (PS:一定要是绝对路径,因为commit 的时候git会去到根据具体的路径名去加载模板)

其中 –global 参数是为了指明是全局配置git,就是影响你电脑上的所有git工程,当然你也可以直接去对应的工程根目录下

执行不带 –global参数的命令 则只会影响当前工程 (还是推荐全局 ,好东西要一起用)

配置完成后 你直接在需要commit的时候输入 git commit

然后会出来一些文本提示 只要大家都按照上面的格式填写我们就也能有和AngularJS一样美观的提交信息了 ,这里有个按照AngularJS规范编写的模板文件

可以直接下载下来配置

PS:对于上面两种方式 个人觉得 commitizen 无疑是利器了,能用尽量用,但有些开发小伙伴可能对纯命令的形式不太喜欢,或者就是不会git 命令

也有些正在使用 如sourceTree一样有着界面的git工具,这个时候就可以采用 git 配置模板的方式了, 由于sourceTree默认也会去加载git全局配置的

commit模板(全局配置的重要性),而且这个配置文件还只能在当前用户根目录的下,这也是为什么上面说要在用户根目录下建配置文件的原因


Comments