GitHooks在构建项目工作流时非常有用,也非常灵活。这里呢,我想分享一下GitHooks在代码规范检查工作流中应用。在团队协作开发时,代码规范化非常重要,我希望在工作流中,能在代码提交前自动进行代码规范检查,只有代码规范检查通过,代码才能完成提交。

Git自带Hooks配置文件

Git工具自带有GitHooks工具,我们可以在项目中的.git/hooks目录下找到配置文件,如下图

可以看到.sample后缀的各种hooks样例,需要使用哪个hook,只需要去掉.sample后缀,编辑对应的脚本文件就可。

如何更简单配置呢

Node环境

前端工作流配置中可以使用npm提供的husky包,只需简单配置就可以使用hooks。

安装husky,这里使用的是next版本,stable版本使用时,脚本未生效,原因暂不明。

1
pip install husky@next --save-dev

package.json文件中进行配置

1
2
3
4
5
6
7
8
9
// package.json
{
"husky": {
"hooks": {
"pre-commit": "npm lint",
"...": "..."
}
}
}

配置完成在每次执行 git commit 前,会先执行对应的脚本。这里只需要配置jslint相关命令,就可完成lint检测,如果不通过,会停止 git commit 操作。

这样我们前端的自动化工作流程就配置完毕了,很简单哦。

Python环境

Python环境中有相当多的和hooks相关的库文件,这里呢,我选择了pre-commit来配置Python环境中的自动化工作流。pre-commit配置起来也相当简单,它提供了一系列的hooks供我们使用,参看

配置时,只需要指定你想要的hooks,pre-commit将会安装并执行相应的hooks在每次 git commit 之前。即使你没有安装node环境,但是修改了js文件并执行js文件代码加测,pre-commit会自动下载并安装node环境来执行jslint检测,并且不需要拥有root权限。

安装pre-commit

1
pip install pre-commit

安装完成后,在项目中添加配置文件.pre-commit-comfig.yaml,添加如下内容

1
2
3
4
5
6
7
8
9
-   repo: git://github.com/pre-commit/mirrors-pylint
sha: 'v1.8.2' # Use the sha / tag you want to point at
hooks:
- id: pylint
name: pylint
entry: pylint
language: python
files: \.py$
args: []

这里我们配置了pylint工作流,在 git commit 命令执行前进行Python代码规范检查。

配置完成后,运行 pre-commit install 将会在git hooks中添加pre-commit,项目中的 .git/hooks 目录下会多一个pre-commit文件,这样我们的配置就完成了。