不,Git本身没有内置机制来确保提交者实际上是存储在提交对象中的提交者.实际上存在这种限制的缺点.Git是一个分布式版本控制系统,因此提交被分发到各个地方,而不一定是集中在一个地方.即使有一个用于收集所有稳定(或其他)变化的中央存储库,通过其他方式传输更改仍然完全没问题,而不是通过所述存储库.
例如,如果开发人员A和B都是从"中央"存储库克隆的,那么A仍然可以处理一些事情,然后明确地将这些更改发送给B进行审查,而无需通过中央存储库(例如,推送到B的存储库,或者从A推出B).想象一下B然后根据这些变化提出一些提交,然后想要将它发布到中央存储库,而不是先在那里推送他自己的更改.如果存在一些限制只允许您自己进行的更改,则B将无法在该情况下推送A的更改.
由于这样的工作流程在真实的分布式工作流程中非常普遍,因此通常不应用这种限制.但是,我仍然可以看到为什么会这样做,可能仅限于少数新开发人员或其他东西.
确实有一些方法可以实施这种限制.请注意,Git本身无法根据SSH密钥检查任何内容.Git有一个简单的协议,所有的身份验证和授权都不会直接由Git处理(Git不支持任何协议).例如,对存储库的SSH访问由操作系统的标准SSH访问规则处理; 对于https访问,http服务器处理身份验证.
Git的常见访问层是Gitolite.它使用单个用户控制SSH访问.本质上,它将用户基于SSH密钥的访问权限限制为非常小的Git特定命令集.您可以为它编写自己的插件,这将需要提交始终与推送用户具有相同的提交者; 或者您可以使用它附带的电子邮件地址来使用已实现的功能.有关详细信息,请参阅手册中的"检查作者电子邮件"部分.
顺便说一句.确保提交的提交者实际上就是它所说的提交者的通常方法是签署提交.虽然它不会阻止作为其他人提交,但它将允许您检查提交者的身份.