2010-04-17 61 views
3

Gitosis能够基于公钥/私钥对对用户进行身份验证。它能够找出哪个用户当前正在提交。但是,用户名和电子邮件取自客户端的Git配置('git config user.name'等),可以将其设置为任意值。有什么办法可以将用户名和电子邮件与他们的公钥相关联,然后让Gitosis使用这些姓名和电子邮件作为提交者的姓名和电子邮件地址?Gitosis可以执行正确的用户名/电子邮件吗?

我不在乎我是否会使用Gitosis或WebDAV或其他一些替代方法来共享存储库。在我看来,没有任何可用的方法支持使用某种“正确的”用户名和电子邮件的强制执行。如果有其他选择,请告诉我。

回答

1

示例update-paranoid钩在GIT中源执行以下检查:

对于所有新提交或标签对象的对象内的提交者(或标记器)线 必须完全匹配user.committer 之一在acl文件中列出的值。

我想,一个可以配置GitosisGitolite做类似的检查,或者你可以写自己的upatepre-receive挂钩。在所有这些情况下,必须通过可以使用Git的“智能”传输来完成推送。这意味着通过SSH推送,或通过“智能”HTTP(git-http-backend);它不包括通过WebDAV推送(“哑”HTTP(S))。

请注意,检查提交作者是没有意义的,因为它们可能来自通过电子邮件发送的修补程序(它是提交者应该在应用之前检查它们),或从樱桃采摘或重新绑定。

+0

谢谢你的回答。我很可能会尝试git-http-backend。与Gitosis一起使用钩子的问题在于它没有设置登录用户的名称(它始终设置为“git”) – k21 2010-04-19 14:56:13

+0

@ koumes21:Gitosis(和Gitolite)根据使用的SSH密钥进行身份验证,所以它认为哪个用户访问了存储库(“登录”),即使它使用'git'shell帐户。 Gitolite为用户提供“GL_USER”环境变量中的“登录”;我不知道Gitosis。 – 2010-04-19 16:35:04

2

请注意,您不能让服务器实际设置(覆盖)作者或提交者,因为为此,它必须修改完全构建提交对象(以及基于此的所有提交)。

这会改变提交的散列/标识。所以你只能拒绝他们。 (从技术上说,当然你可以创建一个新的提交,但是这会导致所有类型的问题)。

相关问题