如何防止未签名的Git提交被推送到代码仓库?
阻止推送未签名Git提交的客户端侧方案
方案1:使用Git预推送钩子(拦截推送环节)
在本地仓库的.git/hooks/目录下新建pre-push文件(不要加后缀),写入以下脚本:
#!/bin/sh # 获取待推送的所有提交哈希 commits=$(git rev-list --objects --stdin --not --all) # 逐个检查提交是否有GPG签名 for commit in $commits; do if ! git verify-commit "$commit" >/dev/null 2>&1; then echo "错误:提交 $commit 未做GPG签名,无法推送。" exit 1 fi done exit 0
给脚本添加执行权限:
chmod +x .git/hooks/pre-push
这个钩子会在你执行git push前自动校验所有待推送的提交,只要有一个未签名就直接阻断推送,还会明确提示问题提交的哈希值。
方案2:强制所有提交默认签名(从源头避免)
通过Git配置强制本地提交必须签名,这样不管用GUI还是CLI创建提交,未签名的提交根本无法生成:
# 仅当前仓库生效 git config commit.gpgSign true # 所有本地仓库都生效 git config --global commit.gpgSign true
记得先配置好你的GPG密钥:
git config user.signingkey <你的GPG密钥ID>
之后任何尝试创建未签名提交的操作都会直接报错,从根源上杜绝漏签。
方案3:双重保障(钩子+配置)
把上面两个方案结合起来:用commit.gpgSign从提交环节就拦截未签名操作,再用pre-push钩子做最后一层校验,彻底避免漏签提交被推送的情况。
内容的提问来源于stack exchange,提问作者cubuspl42
相关产品推荐
相关产品推荐

