Git: 如何安全的进行Commit操作
不知道你有没有遇到过下面几种情况:
一个新的feature开发完成了,要进行一个Commit,但Commit结束了才发现,某个文档的编码风格不太好或者出现了输入错误类似的小瑕疵,你需要再提交一个Patch修复他们。
你要对两个分支进行合并,但不幸的是发生冲突了,而且还不止一两处,你简单的手动修复了冲突,提交代码后等待Code Review,片刻之后,你被通知还有一些散落的冲突根本就没有被解决,并且还残留着冲突的界定符号。
新功能搞定了,也Commit了,提交到Code Base等待被部署,部署也正常,但使用中开始陆续收到反馈Bug,可是你心里在想明明是有测试的呀。不对,这时你反应过来了,你在提交代码之前就根本没有跑过测试。
我想说上面的三种情形我都中过枪了,不过也恰好是这些问题,才让我关注到今天的主角,也要感谢一下把它推荐给我的同事。今天的主角就是这个加强版的pre-commit
钩子。
pre-commit 钩子在键入提交信息前运行。 它用于检查即将提交的快照,例如,检查是否有所遗漏,确保测试运行,以及核查代码。 如果该钩子以非零值退出,Git 将放弃此次提交,不过你可以用 git commit –no-verify 来绕过这个环节。 你可以利用该钩子,来检查代码风格是否一致(运行类似 lint 的程序)、尾随空白字符是否存在(自带的钩子就是这么做的),或新方法的文档是否适当。
上面这段引用自《Pro Git》一书,一般Git钩子可以用在Git流程上做截获控制,比如很多自动化部署软件就有利用Hook这一特性。今天要说的这个帮助我们正确Commit的工具就是一个加强版的pre-commit
钩子命令行。
安装
在安装Ruby环境的前提下执行gem install pre-commit
后,切换到你项目所在目录,执行pre-commit install
,该命令会在你的仓库中创建一个.git/hooks/pre-commit
脚本来帮助你进行提交前的Checkout。至于都会检查哪些项目,需要你根据你的实际需求来做个自定义,目前支持大概20多种检查项目,从Javascript到Ruby再到Go都有支持,详细列表你需要移步到官方地址查看文档,地址附在文末的参考引用中。
使用
查看当前Check项目状态
使用pre-commit list
查看当前支持的Check项目,如下图:
配置要Check的选项
git config pre-commit.checks "[whitespace, jshint, debugger]"
关闭Check选项
git config pre-commit.checks "[whitespace, jshint]"
手动运行Checkout
pre-commit run # 在Index区进行Check
pre-commit run all # 在当前目录中进行Check
pre-commit run git # 对所有被git追踪的文件进行Check,不包括.gitignore
pre-commit run <file-list> # 对指定文件进行检查,不支持正则匹配
怎么样,了解的如何? 快去试一试吧,相信使用pre-commit帮你做一下提交前的预判后,能大大的提高你的Code Review通过几率。毕竟,繁琐的流程和重复性劳动就交给计算机吧。
-完-
你还可以看:
参考引用
http://dwz.cn/2na6QN
http://dwz.cn/2na78M