如何在git中找到实际提交者?

如何在git中找到实际提交者?,git,github,Git,Github,最近,我的一位同事在.gitconfig中使用我的电子邮件&name将代码推到master分支中(道德上是错误的,但主要是为了好玩)。由于git从config中获取名称,而不是实际的ssh或login,其他人在commit中看到我的名字 因为更改配置很容易&不需要任何身份验证/授权。我想知道,有没有一种方法可以让我区分真实的我和虚假的我 注意:我的同事和我有类似的权利推动回购。事实上,这对我们团队中的所有开发人员都是一样的。我们大多数人都使用ssh的方式推进git。在我看来,你的同事在确认自己是

最近,我的一位同事在
.gitconfig
中使用我的电子邮件&name将代码推到
master
分支中(道德上是错误的,但主要是为了好玩)。由于
git
从config中获取名称,而不是实际的
ssh
或login,其他人在commit中看到我的名字

因为更改配置很容易&不需要任何身份验证/授权。我想知道,有没有一种方法可以让我区分真实的我和虚假的我


注意:我的同事和我有类似的权利推动回购。事实上,这对我们团队中的所有开发人员都是一样的。我们大多数人都使用
ssh
的方式推进git。

在我看来,你的同事在确认自己是你的时候是错的,不管采取什么行动——为了审计跟踪,应该将自己的名字设定为自己的命名用户

也就是说,如果该用户拥有将代码推送到repo的正确权限(作为他自己的命名用户),并且没有设置钩子来验证传入的提交是否与进行推送的人匹配,那么我会说,,无法区分是谁进行了这些提交


是一个预接收钩子,它将验证推送代码的人是否也是提交中列出的作者。

我工作过的地方没有发现需要验证提交作者的身份。如果您确实有这种需要,那么您需要签署提交。请参阅git commit的
--gpg sign
选项:

ssh连接应该已登录
/var/log/wtmp
。否则,如果您需要提交身份验证,您可以在存储库中使用签名提交。相关:@spectras能否请您详细说明
签名提交
?这是关于使用GPG向您的每个提交添加个人加密安全签名。其他人将无法使用您的密钥签署提交。这是git核心特性的一部分。git文档的一部分显示了如何使用它的基本原则。@spectras(和Abhishek):请注意,
-s
只是添加了一行文字,上面写着“签字人”。PGP对提交进行签名的是
-s
(大写字母s)。
预接收
挂钩。。我不知道有这样的事!让我检查一下,然后回来:)啊,是的,有几个你可以创建验证脚本;一些客户端,一些服务器端。在这个脚本中,我仍然可以在
authors
变量中添加其他用户名和密码&然后脚本将失败,对吗?我的意思是,它不是完全可靠的,或者我遗漏了什么?答案中列出的脚本,正确,列出了一个认可作者的列表,所以你仍然可以有问题;但这整个问题有点像第二十二条军规;如果您阻止一个作者推送他们没有提交的任何提交,这意味着没有两个人能够在同一个功能分支上工作,因为这样就没有一个人能够合并它;也就是说,验证谁的推送也是不完美的,因为它要求你总是以可以验证推送者的方式推送。如果您要对身份进行断言,那么对提交本身进行签名可以保留向该repo或该repo提交提交的灵活性。如果,也就是说,您真的担心有人会通过一个坏补丁并声称它来自其他人。那么,我可以强制用户始终使用强制签名提交吗?如果是,怎么办?您的源repo可以拒绝具有未签名提交的推送(使用git钩子)。钩子可以在推送中的每个新提交上调用
git-verify-commit
,我相信如果提交没有签名,它将返回非0状态。请参阅GitHooks文档以了解如何设置它。