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

Jey*_*n I 6 git shell github filter email-validation

我在寻找机会来确认提交者的电子邮件地址是否是小写,以避免类似问题,.

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

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

$ git filter-branch --env-filter 'export
GIT_AUTHOR_EMAIL="yourname@example.com";GIT_AUTHOR_NAME="Yourname"'
Run Code Online (Sandbox Code Playgroud)

请建议我是否有其他更好的方法来实现同样的目标.

And*_*w C 8

客户端钩子不是可靠的IMO(客户端总是可以传入--no-verify,或者只是完全删除钩子).您希望使用服务器端挂钩拒绝任何提交错误电子邮件地址的推送,然后为最终用户打印出有关如何使用正确的电子邮件地址重做其提交的恢复说明.

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

-一个

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

的.git /钩/更新

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
Run Code Online (Sandbox Code Playgroud)

如果您尝试推送SHA,您将获得类似的结果

远程:SHA 49511d51548720f774b4a2bed113c43d06c32a34包含一个非法的电子邮件地址,其中包含大写字符remote:AndrewC@whoops.com remote:error:hook拒绝更新refs/heads/master To/scratch/email_repo![远程拒绝]主人 - >主人(勾掉了)


pal*_*ain 5

我不确定它是否偏离主题,但为什么你必须强迫用户使用小写的电子邮件?电子邮件地址的本地部分(@之前的部分)可以区分大小写.

Jeyanthan@serverA.com和JEYANTHAN@serverA.com可以是不同的电子邮件地址,这完全取决于serverA.com.

参见RFC

动词和参数值(例如,RCPT命令中的"TO:"或"to:"和扩展名称关键字)不区分大小写,本规范中的邮箱本地部分唯一例外(SMTP扩展可能明确指定大小写 - 敏感元素).也就是说,命令动词,除邮箱本地部分之外的参数值和自由格式文本可以用大写,小写或大小写的任何混合编码,而不影响其含义. 邮箱的本地部分必须被视为区分大小写.

http://tools.ietf.org/html/rfc5321#section-2.4

http://en.wikipedia.org/wiki/Email_address#Common_local-part_semantics

如果你发现导入大写的电子邮件地址有任何问题,我认为不是要在git中解决这个问题,而应该在导入程序上