git push前强制检查冲突

时间:2024-03-20 11:54:05

引言

有时候同事间会因为疏忽而没有完全处理冲突,而git本身是支持未解决冲突的代码push的,因此就给包括测试、生产的多个部署环境带来可能的运行runtime bug隐患。借助git本身的hook钩子函数,想要强制push前检查冲突是否完整还是非常简单的。

解决方案

1. 定位git hook钩子文件

git的所有配置文件一般统一存放在.git目录下,而钩子文件就放在该文件下:
git push前强制检查冲突

如上图显示是在vscode中将hook目录完全展开的情况,有些编辑器例如上面的vscode会默认隐藏.git目录,这时候只要在配置中查询file.exclude配置项,将其中的.git值从true改成false就可以。

上面所有的.sample结尾的样本钩子文件就是git默认为我们准备好的shell脚本,有需要深入了解更多hook函数的可以参考git的官方文档。这里因为要求我们就只定位pre-push.sample文件,因为这就是处理在push之前的操作。

2. 修改pre-push

笔者是直接从pre-push.sample中复制黏贴后再将后缀名.sample去掉的,用户直接创建同名空文件也没有问题,借着就是贴上效验冲突的shell脚本内容:

# 获取当前分支的冲突检查情况

git --no-pager diff --check 
if [ $? = 0 ]; then
	exit 0
else
	echo 还有冲突未解决
	exit 1
fi

代码写的非常简单,核心是通过git diff --check来检查,如果返回0,也就是没有问题,说明没有冲突,直接push,如果有问题,简单的提示信息,然后中断push。
用户也可以完全按照自己需要修改,保存后就可以测试了。

后记

笔者原本想要做成一个单独npm包,来进行更广泛的传播,奈何npm publish一直不成功。

npm ERR! publish Failed PUT 404
npm ERR! code E404
npm ERR! 404 User not found : git-prepush-check
npm ERR! 404
npm ERR! 404  'git-prepush-check' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.