如何在git中验证每个提交的作者

时间:2013-01-11 11:39:52

标签: git signing git-commit git-tag

我正在研究从subversion到git的迁移。对于初学者,将使用中央存储库方案,就像svn。

一样

问题是我想确保每个提交都是由真人创建的。

在subversion中,假设您缓存您的svn密码,您可以确定提交作者是真正的作者。

从我在网上无数次搜索后阅读的内容中,每次推送中央存储库时,我都应该创建签名标记。为了对代码进行签名,我应该检查以前提交的每个,以确保在我离开计算机时没有人改变任何内容(例如,引入恶意代码并在以后删除它,制作它在整体差异中不可见,但仍在连续构建/测试服务器中执行。)

这意味着我必须仔细检查提交:首先是我创建每个提交,然后是当我决定使用签名标记推送时。但这是耗时且多余的。如果签名标签是可行的方式,那么我想我应该为每个提交创建签名标签。这将用标签填充整个存储库。在我看来,这听起来不太合适。

我能想到的最干净的解决方案是签署每次提交(自git 1.7.9起支持)。但由于某些原因我不明白,这样做是totally stupid。由git支持,但仍然被认为是愚蠢的。

我该怎么办?浪费时间仔细检查所有提交并进行按推式标记签名;每次提交或标记签名;或签署每一次提交?有没有我不知道的替代方案?

提前致谢。

2 个答案:

答案 0 :(得分:2)

我认为你对这个想法真的太过分了,但如果你真的坚持,这是一个解决方案。

安装Gerrit Code Review作为您的中央git服务器。将其配置为禁止直接推送您不信任的人(可能是您的整个团队,可能包括您自己)。

现在,每个人都将被迫先提交代码审查。只有受信任的人批准更改(同样,这可能只有你)。这些批准将由Gerrit服务器记录,只有Gerrit可以向前移动分支。

从现在开始,您信任的唯一git存储库是您的Gerrit服务器,或者您关心的所有分支具有完全相同sha的任何其他git存储库。

Q.E.D。

答案 1 :(得分:1)

如果您信任使用Subversion进行密码验证,您也可以信任使用git进行密码验证。

您在网上阅读的文章可能适用于开源案例,当使用签名标签时,即使您不信任托管存储库的服务器,也会在提交之间建立信任链。对于Subversion,不可能不信任svn服务器,所以我假设你有一台可信赖的机器。在这种情况下,同样适用于svn:保持机器的密码安全。 Git不会自己缓存密码,但您可以使用ssh公钥有效地允许访问服务器,而无需每次都输入密码。

编辑:我假设你也可以信任你的团队。确实可以以任何人的名义进行提交。但是如果团队不能信任使用他们自己的名字,那么你也会遇到更大的问题,例如你是否可以信任这些人的实际代码