一个人写代码的时候,想怎么写就怎么写,能实现功能就非常不错了,何必去和代码质量计较呢,谈什么代码重构!但是在 teamwork 中,这是一个不得不重视的问题。
Paste_Image.png可能你的 team中有代码 review,这个确认能解决不少的问题,但是人眼在某些时候会远不如机器,如果你在 review 别人代码的时,发现有些地方空行太多,命名格式不规范等基本代码功力问题,必定会火冒三丈,心想:我 tm 百忙之中,抽空reveiw 你的代码,结果基本规范都没有通过,简直只浪费我的时间。
低级问题不应该提交到远程仓库,所有提交代码前的审查变得非常有必要。Git,Svn 等版本控制工具支持很多 hooks。以 git hooks 为例 , 钩子(hooks)是一些在"$GIT-DIR/hooks"目录的脚本, 在被特定的事件(certain points)触发后被调用。
pre-commit
在commit 之前会被触发,编程语言以 javascript 为例,如果能在 js 文件提交之前,执行一次 jshint
,那就满足我们的需求了。可最为一个追求极致的人怎么能只满足呢。
最优的模式,
- jshint 检查问题
- beauty code
- format code
- auto review
...
这些都是在本地完成的,当然你也可以用服务器端 check 的方式。比如 code climate
、travis
、jinkens
等工具。
今天的主角是 http://pre-commit.com/
安装
Before you can run hooks, you need to have the pre-commit package manager installed.
Using pip:
pip install pre-commit
Non Administrative Installation:
curl http://pre-commit.com/install-local.py | python
System Level Install:
curl https://bootstrap.pypa.io/get-pip.py | sudo python - pre-commit
In a Python Project, add the following to your requirements.txt (or requirements-dev.txt):
pre-commit
使用
- 进入你的项目目录
- 执行
pre-commit install
- 新建文件
.pre-commit-config.yaml
。yaml 的语法参考 - 编辑你的配置文件
example
- repo: git://github.com/pre-commit/mirrors-jshint
sha: 'v2.8.0' # Use the sha you want to point at
hooks:
- id: jshint
name: jshint
entry: jshint
language: node
files: \.js$
args: []
#excludes:
# Use additional_dependencies to install the actual node package
additional_dependencies: ['jshint@2.8.0']
minimum_pre_commit_version: 0.7.0
更多 hooks
pre-commit
支持非常多的 hooks,配置方法也很简单,只需要你修改 .pre-commit-config.yaml
文件即可,更多 hooks 参考以下截图
网友评论