Gitlab/Gitolite能否强制执行正确的用户名/电子邮件

Gitlab/Gitolite能否强制执行正确的用户名/电子邮件,git,gitolite,gitlab,Git,Gitolite,Gitlab,在使用git进行实验时,我为Gitlab设置了一个自托管存储库,它看起来很棒 有一件事困扰着我,那就是似乎任何人都可以像其他人一样进行提交(即:欺骗提交) ie:我在Gitlab中设置了我的用户,可以使用公钥访问 用户1 用户2 现在只有那些用户可以使用他们的私有SSH密钥进行推送,但是似乎没有什么可以阻止User2调整他们的gitconfig以User1的名义提交,并将其推送上去 gitlab和git-show中的历史记录将提交者显示为User1的gitconfig文本。我希望Gitlab

在使用git进行实验时,我为Gitlab设置了一个自托管存储库,它看起来很棒

有一件事困扰着我,那就是似乎任何人都可以像其他人一样进行提交(即:欺骗提交)

ie:我在Gitlab中设置了我的用户,可以使用公钥访问

  • 用户1
  • 用户2
现在只有那些用户可以使用他们的私有SSH密钥进行推送,但是似乎没有什么可以阻止User2调整他们的gitconfig以User1的名义提交,并将其推送上去

gitlab和git-show中的历史记录将提交者显示为User1的gitconfig文本。我希望Gitlab将与推送ssh密钥相关联的用户名标记到历史记录中,这样我就知道推送的是谁的ssh密钥

这种情况下,回购协议将在团队环境中使用,不允许伪造提交似乎是明智之举

我读过一些书,了解到通常情况下,人们可能会将工作流更改为拥有一个受欢迎的存储库,并且只有可信的提交者可以推动实现这一点——但在学习git的这一阶段,我希望留在一个更集中的/SVN类型的工作流中

这可以用钩子吗

gitosis有一个答案,但就我所知,即使它似乎只强制提交者来自一系列用户,这些用户并没有阻止User1作为User2进行欺骗

PS:也许我问了一个错误的问题——gitlab中有没有办法发现哪个ssh密钥(以及真正的用户)被用来将代码推送到repo中?从我所能找到的情况来看,情况并非如此。

更新2015

正如本文所提到的,GitLab Enterprise在其与项目关联的git挂钩中有一种控制电子邮件的方法:

转到项目设置->git钩子并检查作者电子邮件的验证

任何与已知用户不匹配的电子邮件都将被拒绝


原始答复(2012年)

实现用户id控制的一个部分方法是,如果推送它的人至少没有提交一个推送的提交,则让gitolite(gitlab所依赖的)拒绝推送

推送时,将对您进行身份验证(基于Gitolite注册的公钥的名称,或者通过类似LDAP连接的其他方式)。
您可以添加一个
pre-receive
hook,它将检查所有新提交,并查找至少一个以正确名称提交的提交(即推送所述提交的用户的id)。

以此为例。

我尝试了这个方法,几乎奏效,但我得到了$GL\u USER的一个奇怪值。钩子运行,但错误为“remote:NoCommit found with firstname_lastname_gmail_com_1345598530 as committer name”。我不知道最后一串数字是从哪里来的-一些gitlab内部的东西?Gitlab似乎不支持任何其他功能,因此可能这对Gitlab不起作用?经过进一步挖掘,firstname_lastname_gmail_com_1345598530的$GL_用户值是Gitlab数据库中存储ssh用户密钥的“keys”表的标识符列。它似乎是自动生成的,不能从用户界面进行设置。@fiat I confirm:
GL\u USER
是用公钥的名称设置的,由Gitlab以这种方式命名,并由gitolite注册。