版本控制中最重要的一件事是知道是谁做了什么更改。如果有什么改变,而我不知道为什么要改变,我会回顾历史,询问做出改变的人。当我在探索git的时候,有一件事让我对这个特性感到有点紧张,那就是它看起来真的很容易伪造。是什么阻止我在user.name和user.email的git全局配置中放置同事名称/电子邮件?当使用诸如gitosis/gitolite (定义用户)或github (我假设使用gitosis/gitolite之类的东西)之类的东西时,是否有什么办法看谁真正做出了承诺?
发布于 2011-04-23 11:33:49
Gitolite日志(在.gitolite/logs/gitolite-*中)--每次推送的Gitolite用户。要确定引入特定提交的推送,还有更多的工作要做,但它应该是直接的(一种方法是在每次提交的尖端放置轻量级标签,然后使用git name-rev查找提交后的第一个标记)。
大多数Gitolite用户可能只有一个与其关联的SSH密钥(keydir/user.pub),但单个用户可能有多个SSH密钥(keydir/user@*.pub)。
因此,对于基于SSH的Gitolite,您可以映射每个提交到一个(或多个)SSH键。
您是否信任SSH密钥来准确识别某个特定的人是另一个问题(即,您是否信任用户保持其私有SSH密钥的安全?)
Gitolite还可以通过“智能HTTP”限制Git访问。在这种情况下,web服务器在REMOTE_USER环境变量(即,而不是使用.ssh/authorized_keys文件根据SSH键识别用户)中提供Gitolite用户名。标识和身份验证完全取决于web服务器本身(通常只是用户名和密码,但每个用户可以使用SSL证书来执行类似基于SSH的访问)。
因此,对于基于HTTP的Gitolite,您可以将每个提交映射到由web服务器完成的身份验证。
GitHub有一些类似的信息,这些信息可以通过GitHub API的事件部分进行查询(以前,它似乎只作为您所监视的存储库的“Newsfeed”条目的一部分)。每个PushEvent标识执行推送的GitHub用户、更新了ref (分支)的名称、新ref“head”(更新分支的新提示)的名称(SHA1散列)和提交列表。
发布于 2011-04-23 11:36:24
这不是一个伦理或哲学论坛,但是
git允许签名提交和签名标记。这应该会帮助你喂养你的妄想症:)
发布于 2011-04-22 13:22:57
您可以让每个人签署提交与GPG:请参阅本教程。
在本教程中,GPG密码在git配置中设置,这在我看来是无稽之谈,因此您希望在每次提交时都有钩子提示给用户。
当然,如果你不是经理,建议每个人签署他们的承诺可能在外交上很难,所以要谨慎。
编辑:正如布赖恩所指出的,这只是签署提交消息,所以这不是好的解决方案。我保留答案,因为它可能仍然有助于理解问题。
https://stackoverflow.com/questions/5755739
复制相似问题