我正在寻找确认提交者的电子邮件地址是否为小写的可能性,以避免像 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/