22

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

显然,解决方案是适当地设置存储库特定的配置,不幸的是我一直忘记设置它,直到我提交了一些,所以我使用全局 user.email 配置,如果这与我的匹配就很好工作,但不是那么好。

如果 user.email 没有在任何地方设置,git 只需将本地用户名和主机挤在一起组成一个(对于台式机来说不是那么棒);我希望它只是阻止提交。我不认为钩子会起作用,因为我希望这发生在新的和克隆的回购中——如果我手动将钩子复制到回购中,我可能应该设置配置。

4

2 回答 2

26

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

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

请参阅Dan Aloni ( )的提交 4d5c295(2016 年 2 月 6 日) 。 帮助者:Eric Sunshine ( )。 请参阅Jeff King ( )的提交 59f9295(2016 年 2 月 4 日) 。 帮助者:Eric Sunshine ( )(由Junio C Hamano 合并 -- --提交 c37f9a1中,2016 年 2 月 17 日)da-x
sunshineco
peff
sunshineco
gitster

ident:为不应该猜到的时间添加user.useConfigOnly布尔值ident

以前是这样的:

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

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

然而,最近的更改19ce497 ( ident: keep a flag for bogus default_email, 2015-12-10 for git 2.6.5, Jan. 2016) 声明显式配置不是user.email伪造的,无论其值是什么,所以这个hack 不再有效。

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

因此,从 2016 年 3 月和 git 2.8 开始,请执行以下操作:

git config --global user.useConfigOnly true

您的任何新仓库都user.email 只会在其本地.git/config文件中查找。如果在本地 git 配置中找不到,
则提交将不会继续。user.email


请注意,它将在 git 2.9(2016 年 6 月)中得到更多增强:

请参阅提交 d3c06c1提交 734c778(2016 年 3 月 30 日)由Marios Titas (``)
(由Junio C Hamano 合并 -- gitster--提交 e7e6826中,2016 年 4 月 29 日)

identuseConfigOnly在自动检测姓名/电子邮件之前检查

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

identuseConfigOnly:出错时给出“请告诉我”消息

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

所以而不是:

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

你会看见:

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

原始答案(2012 年 9 月)

有点像“使用预提交钩子停止特定作者的 git 提交”,你可以定义一个默认的预提交钩子来检查:

 git config --local user.email

是否为空。
如果为空:exit 1

要确保您为正在创建的每个 repo 使用该默认挂钩,请参阅“更改默认 git 挂钩”。
这是一种类似于“分享你的 git hooks ”中描述的方法:

于 2012-09-06T04:15:11.640 回答
2

我刚刚发现了一个 hack/workaround,只需将默认全局电子邮件设置为(none),如下所示:

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

很少解释:此解决方法取决于官方 git 客户端源代码中的当前电子邮件验证,因此使用它需要您自担风险。

于 2014-07-31T03:48:14.440 回答