需求产生背景
为了防止不小心把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
有问题欢迎留言,沟通,我有兴趣的问题,会尽能力去回答。