Git日志历史

rya*_*zec 6 git version-control gitosis gitolite

对版本控制很重要的一件事是知道谁做了什么改变.如果事情发生了变化,我不知道为什么要做出改变,我会查看历史并询问做出改变的人.当我正在探索git时,让我对这个功能有点紧张的一件事是它看起来很容易伪造.什么阻止我将同事姓名/电子邮件放在user.name和user.email的git global config中?当使用像gitosis/gitolite(定义用户)或github(我假设使用像gitosis/gitolite这样的东西)之类的东西时,有什么可以看到谁真正做出了提交吗?

Chr*_*sen 5

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 APIEvents部分进行查询(之前它似乎只是作为您监视的存储库的"Newsfeed"条目的一部分提供).每个PushEvent标识执行推送的GitHub用户,ref(分支)的名称已更新,新ref"head"的名称(SHA1哈希)(更新分支的新提示)以及提交列表.


Cha*_*esB 0

您可以让每个人都使用 GPG 签署提交:请参阅本教程

在本教程中,GPG 密码是在 git config 中设置的,这对我来说似乎毫无意义,因此您需要让钩子在每次提交时提示用户。

当然,如果你不是经理,建议每个人都签署承诺可能会在外交上很困难,所以要谨慎。

编辑:正如布莱恩指出的,这只是签署提交消息,所以这不是一个好的解决方案。我保留答案,因为它可能仍然有助于理解问题。

  • 您链接到的那个帖子是签署提交的完全错误的方式。它只签署提交消息,而不是提交本身,这意味着任何想要冒充其他人的人都必须重用他们的提交消息。此外,正如您所指出的,它建议您保持密码清晰。签署提交通常是一件比其价值更痛苦的事情,尤其是当您开始处理诸如变基、从电子邮件应用补丁等问题时。 (4认同)