查看原文
其他

Git: 如何安全的进行Commit操作

lazybios 日拱一卒 2020-08-20

不知道你有没有遇到过下面几种情况:

  1. 一个新的feature开发完成了,要进行一个Commit,但Commit结束了才发现,某个文档的编码风格不太好或者出现了输入错误类似的小瑕疵,你需要再提交一个Patch修复他们。

  2. 你要对两个分支进行合并,但不幸的是发生冲突了,而且还不止一两处,你简单的手动修复了冲突,提交代码后等待Code Review,片刻之后,你被通知还有一些散落的冲突根本就没有被解决,并且还残留着冲突的界定符号。

  3. 新功能搞定了,也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通过几率。毕竟,繁琐的流程和重复性劳动就交给计算机吧。

-完-

你还可以看:

Git: 聊聊Rebase命令

Git: 如何优雅的执行「git pull」操作

Git:「小步快跑」的开发模式

Git: 忽略已被提交的文件

Git: 重写提交历史

Git: 如何在你的项目中正确使用Submodules


参考引用

  • http://dwz.cn/2na6QN

  • http://dwz.cn/2na78M



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存