如何防止未签名的Git提交被推送到仓库?

yrdbyhpb  于 2023-04-04  发布在  Git
关注(0)|答案(1)|浏览(136)

我正在合作一个项目,该项目要求对所有提交进行GPG签名。
不幸的是,我正在使用的Git GUI客户端和git CLI接口不支持GPG签名。我知道如何轻松地sign commits after the fact,所以这不是什么大问题。
但是我必须记住这样做。结果,我有时会不小心推送未签名的提交。有什么方法可以很容易地从客户端防止这种情况吗?

am46iovg

am46iovg1#

使用Git pre-push钩子,可以很容易地按存储库完成此操作。
创建一个位于.git/hooks/pre-push可执行文本文件,内容如下:

#!/bin/sh

while read local_ref local_sha remote_ref remote_sha
do
  for commit in $(git rev-list --reverse $remote_sha..$local_sha)
  do
    if ! git verify-commit $commit >/dev/null 2>&1
    then
      echo "ERROR: Unsigned commit detected!"
      exit 1
    fi
  done
done

当你尝试不小心推送未签名的提交时,推送将被阻止:

➜  App git:(feature-1) git push
ERROR: Unsigned commit detected!
error: failed to push some refs to 'github.com:cubuspl42/myrepo.git'

请注意,钩子不会与其他代码一起克隆、推送或拉取。如果您的同事或合作者想要使用此钩子(或任何其他钩子),则需要他们自己添加。
当你对仓库没有严格的控制权,并且想控制自己的行为时,这个解决方案是很好的。如果你是仓库的实际所有者,并且想保护仓库不接受未签名的提交,你应该找到另一个解决方案

相关问题