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环境变量中提供Gitolite用户名(即,而不是使用该.ssh/authorized_keys文件根据SSH密钥识别用户).标识和身份验证完全取决于Web服务器本身(通常只是用户名和密码,但每用户SSL证书可用于执行更类似于基于SSH的访问).
因此,对于基于HTTP的Gitolite,您可以将每个提交映射到Web服务器完成的身份验证.
GitHub有一些类似的信息,可以通过GitHub API的Events部分进行查询(之前它似乎只是作为您监视的存储库的"Newsfeed"条目的一部分提供).每个PushEvent标识执行推送的GitHub用户,ref(分支)的名称已更新,新ref"head"的名称(SHA1哈希)(更新分支的新提示)以及提交列表.
您可以让每个人都使用 GPG 签署提交:请参阅本教程。
在本教程中,GPG 密码是在 git config 中设置的,这对我来说似乎毫无意义,因此您需要让钩子在每次提交时提示用户。
当然,如果你不是经理,建议每个人都签署承诺可能会在外交上很困难,所以要谨慎。
编辑:正如布莱恩指出的,这只是签署提交消息,所以这不是一个好的解决方案。我保留答案,因为它可能仍然有助于理解问题。