git hooks在业务中的使用
2024-09-06 18:25:56
起因
最近公司项目发生了一起线上事故,最后排查下来是配置文件的问题。项目里application.yml文件内会用@build.time@记录打包时的时间,但是这个写法是build-helper-maven-plugin提供的(maven本身的写法有时差问题),但是用这种写法的话,项目运行时会报错,因为idea运行不经过maven打包的步骤。
公司内部一般是在@build.time@两边加引号来解决这个问题,提交的时候再去掉,但是提交时可能会忘记去掉,然后就造成了线上事故。
解决方法
可以使用git hooks提供的钩子在提交代码前检查是否有更改@build.time@,如果更改了就中止提交。
git hooks提供了很多钩子供开发者使用,具体的可以参考官网https://git-scm.com/docs/githooks,这里我们使用pre-commit钩子。做法如下:
首先,进入项目根目录下的.git/hooks文件夹下,在这个目录下可以看到很多的示例文件。
applypatch-msg.sample*
commit-msg.sample*
post-update.sample*
pre-applypatch.sample*
pre-commit.sample*
prepare-commit-msg.sample*
pre-push.sample*
pre-rebase.sample*
pre-receive.sample*
update.sample*
然后创建一个pre-commit文件,注意这里不要加后缀,在文件内填入以下内容:
#!/bin/bash
echo "code check running..."
for FILE in `git diff --name-only --cached`; do
grep -E \'@build.time@\'\|\"@build.time@\" $FILE 2>&1 >/dev/null
if [ $? -eq 0 ]; then
echo $FILE '修改了build-time,请调整后重新commit'
exit 1
fi
done
这端代码的流程就是先获取改动的文件,然后遍历文件内容,如果文件内查到了关键词,就中止提交并提示。
之后执行git commit前就会自动执行pre-commit内的命令,效果如下:
搞定!
最新文章
- HomeKit 与老旧设备
- AOJ 0121: Seven Puzzle (BFS DP STL 逆向推理)(转载)
- java文件保存至服务器
- VC/MFC ListCtrl 控件功能使用汇总(转)
- 项目实战10.1—企业级自动化运维工具应用实战-ansible
- numpy的数组常用运算练习
- Linux指令集
- C# 防止content-type修改后上传恶意文件
- redis集群搭建教程(以3.2.2为例)
- chrome 开发并使用油猴 Tampermonkey 插件
- ElasticSearch-hadoop saveToEs源码分析
- qt ISO C++ forbids declaration of 'XXXX' with no type
- python Django Ajax基础
- Web API: Client: HttpClient Message Handlers
- ASP.NET的页面执行过程
- Jenkins报错Error cloning remote repo 'origin'
- C# List<;string>; 的Contains方法 是区分大小写的
- python脚本8_打印对顶三角形
- jQuery Recipies - 使用map来过滤对应的元素集
- 【面试】D