起因

最近公司项目发生了一起线上事故,最后排查下来是配置文件的问题。项目里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内的命令,效果如下:

搞定!

最新文章

  1. HomeKit 与老旧设备
  2. AOJ 0121: Seven Puzzle (BFS DP STL 逆向推理)(转载)
  3. java文件保存至服务器
  4. VC/MFC ListCtrl 控件功能使用汇总(转)
  5. 项目实战10.1—企业级自动化运维工具应用实战-ansible
  6. numpy的数组常用运算练习
  7. Linux指令集
  8. C# 防止content-type修改后上传恶意文件
  9. redis集群搭建教程(以3.2.2为例)
  10. chrome 开发并使用油猴 Tampermonkey 插件
  11. ElasticSearch-hadoop saveToEs源码分析
  12. qt ISO C++ forbids declaration of 'XXXX' with no type
  13. python Django Ajax基础
  14. Web API: Client: HttpClient Message Handlers
  15. ASP.NET的页面执行过程
  16. Jenkins报错Error cloning remote repo 'origin'
  17. C# List<string> 的Contains方法 是区分大小写的
  18. python脚本8_打印对顶三角形
  19. jQuery Recipies - 使用map来过滤对应的元素集
  20. 【面试】D

热门文章

  1. crane:字典项与关联数据处理的新思路
  2. Tomcat深入浅出——Servlet(二)
  3. 开启apache2的ssl访问功能
  4. 【cartographer_ros】六: 发布和订阅路标landmark信息
  5. 记录一下第一次在CodeForces供题的事(未完待续)
  6. java.Scanner 拓展用法
  7. 如何编写测试团队通用的Jmeter脚本
  8. 4-16译码器(always,case用法)
  9. 【New】Code Insertion
  10. SQLServer从入门基础