尝试使用git,我为自托管存储库设置了Gitlab,它看起来很棒。
让我烦恼的一件事是,似乎任何人都可以像其他人一样提交提交(即:欺骗提交)。
即:我在Gitlab中使用公钥访问设置了我的用户
现在只有那些用户可以推送 - 使用他们的私有SSH密钥 - 但似乎没有什么能阻止 User2 调整他们的gitconfig以 User1 的名义提交并推送那个?
gitlab和 git -show 中的历史记录将提交者显示为User1的gitconfig文本。我希望Gitlab将与推送ssh密钥相关联的用户名标记到历史记录中,这样我就知道使用了哪个ssh密钥来推送。
场景是repo将在团队环境中使用,而且不允许欺骗性提交似乎是谨慎的。
我已经完成了一些阅读并理解,通常可以改变工作流程以拥有一个受祝福的存储库,并且只有可信任的提交者可以推送到那个 - 但是在这个阶段同时学习git我希望保持更集中/ SVN类型的工作流程。
这可能是使用钩子吗?
对于gitosis有一个similar question的答案,但即便如此,似乎只强制提交者来自一系列用户,这些用户不会像User2那样阻止User1欺骗。
PS:也许我在问错误的问题 - 在gitlab中有没有办法发现哪个ssh密钥(以及真正的用户)被用来将代码推送到repo中?从我能找到的东西看来并不是这样。答案 0 :(得分:5)
2015年更新
正如这篇帖子所提到的,GitLab Enterprise在其项目中与git钩子相关联,可以控制电子邮件:
转到项目设置 - > git钩子并检查作者电子邮件的验证。
任何与已知用户不匹配的电子邮件都会被拒绝。
原始答案(2012)
实现用户ID控制的一个部分方法是使gitolite(gitlab依赖于)拒绝推送,如果推送的提交中至少有一个没有提交推送提交。
当您推送时,您将通过身份验证(基于Gitolite注册的公钥名称,或者通过LDAP连接等其他方式)。
您可以添加一个pre-receive
挂钩,它将检查所有新提交,并查找至少一个由正确名称提交的挂钩(即推送所述提交的用户的ID)。
请参阅此pre-receive
hook作为示例。