如果未设置用户电子邮件,如何进行git block提交?

时间:2012-09-06 03:30:30

标签: git

我有单独的电子邮件地址,我用于工作项目与开源项目,我想确保为每种类型的项目使用正确的电子邮件地址。

显然,解决方案是适当地设置存储库特定的配置,遗憾的是我一直忘记设置它,直到我提交了几个提交,因此使用全局user.email配置,如果匹配的话,这很好我正在努力,但不是那么好。

如果没有在任何地方设置user.email,那么只需要将本地用户名和主机放在一起就可以创建一个(桌面计算机不是那么棒);我希望它只是阻止提交。我不认为挂钩会起作用,因为我希望这种情况发生在新的& cloned repos - 如果我手动将钩子复制到repo中,我应该设置配置。

2 个答案:

答案 0 :(得分:22)

新更新(2016年2月,适用于git 2.8)

git 2。8(2016年3月)将添加一个新的解决方案:

commit 4d5c295Dan Aloni (da-x)(2016年2月6日) 帮助:Eric Sunshine (sunshineco)
commit 59f9295查看Jeff King (peff)(2016年2月4日) 帮助:Eric Sunshine (sunshineco)
Junio C Hamano -- gitster --在2016年2月17日commit c37f9a1合并)

  

ident:添加user.useConfigOnly布尔值,以便{@ 1}}不应该被猜到

     

过去是这样的:

ident
  

是人们强迫自己设置git config --global user.email "(none)" 的可行方式   每个存储库。
  这对于拥有多个电子邮件地址的人有用,针对不同的克隆定位不同的电子邮件地址,因为它禁止git创建提交,除非在每个repo配置中将user.email配置设置为正确的电子邮件地址。

     

最近的更改19ce497user.email:保留虚假标志   然而,default_email,2015-12-10 for git 2.6。5,2016年1月),声明明确配置的ident 虚假,无论它的值是什么,所以这个黑客不再有效。

     

通过添加新的配置变量 user.email来提供相同的功能;设置此变量时,   用户必须明确设置user.email配置

从2016年3月开始,git 2.8,请执行:

user.useConfigOnly

您的任何新回购邮件都会在其本地git config --global user.useConfigOnly true 文件中查找user.email
如果在本地git配置中找不到.git/config,则提交将不会继续。


请注意,它将在git 2。9(2016年6月)中进一步增强:

commit d3c06c1commit 734c778Marios Titas (``)(2016年3月30日) (由Junio C Hamano -- gitster --合并于commit e7e6826,2016年4月29日)

  

user.email:在自动检测姓名/电子邮件之前检查ident

     

如果设置了useConfigOnly,则尝试自动检测名称和/或电子邮件是没有意义的。
  自动检测甚至可能导致伪名称并触发错误消息。

     

user.useConfigOnly:在ident错误

上给出“请告诉我”消息      

使用描述性较差的错误消息来阻止用户禁用useConfigOnly配置变量来解决此错误情况。我们希望鼓励他们设置user.name或user.email。

所以而不是:

user.useConfigOnly

你会看到:

user.useConfigOnly set but no name given
user.useConfigOnly set but no mail given

原始答案(2012年9月)

有点像“Stop a git commit by a specific author using pre-commit hook”,您可以定义默认预提交挂钩,检查是否:

no name was given and auto-detection is disabled
no email was given and auto-detection is disabled

是否为空。
如果为空: git config --local user.email

要确保您为正在创建的每个仓库使用该默认挂钩,请参阅“change default git hooks”。
它与“Share your git hooks”中描述的方法类似:

答案 1 :(得分:1)

我刚刚发现了一个黑客/解决方法,只需将默认的全局电子邮件设置为(none),如下所示:

git config --global user.email "(none)"

小解释:此解决方法取决于官方git客户端源代码中的当前电子邮件验证,因此请自行承担风险。