git - 如何强制用户在 GIT 中使用小写的电子邮件地址

标签 git shell github filter email-validation

我正在寻找确认提交者的电子邮件地址是否为小写的可能性,以避免像 this 这样的问题.

我正在考虑实现一个客户端预提交钩子(Hook)脚本,它可以将用户名和电子邮件中的大写字符转换为小写字符,或者只是警告用户在 git 配置中进行更改。

我不想每次在导入过程中遇到错误时都写这样的东西。不建议这样做,因为它会导致引用值发生修改,并可能破坏某些内容。

$ git filter-branch --env-filter 'export
GIT_AUTHOR_EMAIL="yourname@example.com";GIT_AUTHOR_NAME="Yourname"'

如果有任何其他更好的方法来实现相同的目标,请建议我。

最佳答案

客户端 Hook 在我看来是不可靠的(客户端总是可以传入 --no-verify,或者完全删除 Hook )。您希望使用服务器端 Hook 来拒绝任何使用错误电子邮件地址提交的推送,然后为最终用户打印恢复说明,以了解如何使用正确的电子邮件地址重做他们的提交。

如果您在已发布的历史记录中有现有的提交,您没有任何非破坏性的选项来修复它们。

-一个

这是一个非常粗略的示例,只能正确处理现有的分支更新。您将需要添加更多案例来处理新的分支、删除、标记等,以及有关他们如何配置电子邮件以及如何使用正确的电子邮件信息重新创建提交的说明。但它应该能让您入门。

.git/hooks/更新

refname="$1"
oldrev="$2"
newrev="$3"

for sha in $(git rev-list ${oldrev}..${newrev})
do
   git log ${sha}  --format="%ae %ce" -1 | grep [A-Z]
   if [ $? -eq 0 ]
   then
      echo "SHA ${sha} contains an illegal email address containing uppercase characters"
      git log ${sha} --format="%ae %ce" -1
      exit 1
   fi
done

如果你尝试推送一个 SHA,你会得到这样的结果

remote: SHA 49511d51548720f774b4a2bed113c43d06c32a34 contains an illegal email address containing uppercase characters remote: AndrewC@whoops.com remote: error: hook declined to update refs/heads/master To /scratch/email_repo ! [remote rejected] master -> master (hook declined)

关于git - 如何强制用户在 GIT 中使用小写的电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24540258/

相关文章:

Ubuntu 上的 Git 和 Ldap 以及 Apache

php - 有没有更好的方法来编写 git 预提交 Hook 来检查提交中的任何 php 文件是否存在解析错误?

linux - cp 命令不在 sh\bash 脚本中创建目录,为什么?

regex - sed error "unterminated ' s' command”故障排除

html - 图片未显示在 GitHub 托管的站点中

ios - 每当我尝试使用Git切换到另一个分支时,Xcode都会创建一个新分支?

java - Git日志推荐java日期格式

linux - 如何将一些行移动到文件的顶部?

git - 如果您强制推送到具有现有 pull 请求的分支,会发生什么情况?

Github 显示我的提交已被 2 位作者推送 : me and me