git hook用来检查用户名和邮箱

2022年 8月 5日 54点热度 0人点赞

引言

换了个操作系统, 然后 git 也是新装的, 每次容易提错 commit 中的 author 和 email, 遂研究了下 git hook.

全局 hook

这里说下两个方法:

  1. 假如你用的 ubuntu(其它*nix系统应该一样的), 可以把这个钩子放到/usr/share/git-core/templates/hooks目录底下. 每次 clone 或者 init 一个仓库时, 会自动把 templates 目录底下的东西拷贝到新仓库的.git/目录下面, 包括 hooks. 设置好以后, 新仓库都会自动拷贝, 设置之前已经存在的仓库里可以再执行下git init来拷贝这些全局钩子./usr/share/git-core/templates/hooks这个路径可以通过git config设置init.templateDir来重写. 这种方式相对第二种更灵活一些.
  2. 第二种是通过git config设置 core.hooksPath 来指定一个目录, 假如设置成 system 或者 global 级别的, 那所有仓库都会把这个目录当成钩子目录, 需要执行钩子时, 会执行这个目录里的钩子, 而不会管.git/hooks底下的钩子. 如果某个仓库需要用自己的钩子, 那就要用 local 级别的core.hooksPath的设定来覆盖全局设定. 这种做法比较适用于需要统一管理钩子的场景, 一台机子上有几个用户会登录使用.

作者:Elpie Kay
链接:https://www.zhihu.com/question/65604891/answer/232935144
来源: 知乎
著作权归作者所有. 商业转载请联系作者获得授权, 非商业转载请注明出处.

设置全局钩子的路径

git config --global core.hooksPath ~/.git_template/hooks

我的 pre-commit hook

#!/bin/bash

remote_gitlab_ip='192.168.101.70'                   # 远程服务器 IP
remote_push_url=`git remote get-url --push origin`  # 获取远程的 push 地址
user_name=`git config user.name`                    # 获取用户名
user_email=`git config user.email`                  # 获取邮箱

echo ""
echo -e "\033[33m 主人, 你好, 我是 git 小管家, 为了防止你出错, 我会做一些检查哦!!! \033[0m"
echo ""
echo ""
echo "========================================================================"
printf "|%-20s | %-50s |\n" '远程地址' $remote_push_url
printf "|%-20s | %-50s |\n" '用户名称' $user_name
printf "|%-20s | %-50s |\n" '用户邮箱' $user_email
echo "========================================================================"
echo ""
echo ""

if [[ $remote_push_url =~ $remote_gitlab_ip ]]; then
    if [ $user_name != 'yangxu' ] || [ $user_email != 'yangxu@egova.com.cn' ]; then
        echo -e "\033[31m XXXXXXXXXXX  提交公司代码请使用规范的用户名和邮箱!!!!!!!!!!! \033[0m"
        echo ""
        exit 1
    fi
else
    if [ $user_name != 'duhbb' ] || [ $user_email != 'duhbbx@gmail.com' ]; then
        echo -e "\033[31m XXXXXXXXXXX  提交外面的代码请检查用户名和邮箱!!!!!!!!!!! \033[0m"
        echo ""
        exit 1
    fi
fi

echo ""
echo -e "\033[32m 恭喜主人, 通过了作者信息的检查, 下次再见吧! \033[0m"
echo ""

rainbow

这个人很懒,什么都没留下

文章评论