如何禁止向GitHub仓库推送非企业邮箱的提交?仅允许*@mycompany.com
禁止GitHub仓库推送非企业邮箱提交的实现方法
可以实现,主要通过GitHub原生规则或自托管环境下的预接收钩子来限制提交邮箱,具体方法如下:
方法一:使用GitHub原生仓库规则(推荐)
该方法适用于GitHub付费计划(Team/Enterprise)的私有仓库或公共仓库,无需编写脚本:
- 进入目标仓库的「Settings」→「Rules」→「Rulesets」
- 点击「Create ruleset」,选择需要限制的分支(如
main、develop) - 在「Conditions」→「Commit author email」中选择「Matches regex」,填入正则表达式:
^.*@mycompany\.com$ - 开启「Block rule violations」选项,不符合邮箱格式的提交会被直接拦截
- 保存规则即可生效
方法二:预接收钩子(自托管GitHub Enterprise适用)
如果使用自托管的GitHub Enterprise实例,可以自定义预接收钩子脚本拦截不符合要求的提交:
- 编写Shell脚本示例:
#!/bin/bash ALLOWED_DOMAIN="mycompany.com" # 遍历推送的所有提交 while read oldrev newrev refname; do # 获取提交的作者邮箱 git log --format='%ae' $oldrev..$newrev | while read email; do # 校验邮箱后缀 if [[ ! "$email" =~ @$ALLOWED_DOMAIN$ ]]; then echo "ERROR: 提交邮箱 $email 不符合要求,仅允许使用 *@$ALLOWED_DOMAIN 格式的邮箱" exit 1 fi done done exit 0
- 在GitHub Enterprise的「Admin settings」→「Hooks」→「Pre-receive hooks」中添加该脚本并关联目标仓库
- 启用钩子后,不符合规则的推送会被拦截
注意事项
- GitHub公有云(GitHub Cloud)不支持自定义预接收钩子,仅能使用原生仓库规则
- 可提示用户通过
git config --global user.email "yourname@mycompany.com"配置本地默认邮箱,避免提交时出错
内容的提问来源于stack exchange,提问作者DAVID _
相关产品推荐
相关产品推荐

