git 提交前检查todo debug等代码,防止不期望的东西上生产

479 阅读1分钟

需求产生背景

为了防止不小心把login类中写的debug配置代码扔到线上以及远程仓库,决定学习git-hook钩子来约束自己的本地行为。

代码和说明

git提供了处理代码管理流程的生命周期钩子(也就是在做什么事情之前会通知外面我要干了,给你一个时机去做处理),然后git在git repo创建时(即git init操作时)会产生一个.git的隐藏目录(目录内容我没深入折腾)。.git下会有一个hooks文件夹,里面会有一个pre-main.sample的示例代码,想要替换成下面的shell脚本内容后,git commit时得到运行,需要把pre-main文件的后缀.sample去掉,之后当你git commit时就会检查作用。

支持shell脚本也支持ruby,python等,但是下面的shell已经够用了,不懂shell 参考下面的if啥的也能写个大概,至少满足我目前的简单要求。

#!/bin/bash
echo "pre-main hook 运行了"
for FILE in `git diff --name-only --cached`; do
    # 忽略检查的文件
    if [[ $FILE == *".sh"* ]] ; then
        continue
    fi

    # 拦截特定的类
    # if [[ $FILE == *"AppDelegate.m"* ]] ; then
    #     echo -e $FILE '拦截到了AppDelegate'
    #     exit 1
    # fi

    # 匹配不能上传的关键字
    grep 'TODO\|debugger\|alert(' $FILE 2>&1 >/dev/null
    if [ $? -eq 0 ]; then
        # 将错误输出
        echo -e $FILE '文件中包含了TODO、debugger、alert其中一个关键字请删除后再提交'
        exit 1
    fi
done
exit

有问题欢迎留言,沟通,我有兴趣的问题,会尽能力去回答。

参考文章