如何在git中强制执行author / commiter身份验证?

时间:2017-12-12 11:16:40

标签: git tfvc

我们目前正在项目中使用git进行版本控制。开发环境是一个内部网(带有AD的Windows服务器),无法访问Internet。有没有办法配置git使用开发人员'作者和提交者的域登录?我们希望阻止开发人员自己提供这些信息。谷歌在搜索问题时发现了这一点:

https://docs.microsoft.com/en-us/vsts/tfvc/comparison-git-tfvc

对于可审计性,它声明了git: "您可以识别哪个用户推送了提交。 (任何人都可以声明作为作者或提交者的任何身份。)您可以确定何时进行了更改,使用历史记录,比较和注释进行了更改。"

对于TFVC: "由于您的团队将所有工作都检入集中式系统,因此您可以确定在变更集中签入的用户,并使用比较来查看他们更改的内容。查看文件,您可以对其进行注释,以确定谁更改了代码块,以及何时更改了代码。"

纯粹基于这些文本,我们似乎应该转向TFVC。

我错过了什么?

2 个答案:

答案 0 :(得分:1)

  1. 告诉会员如何使用正确的值配置user.nameuser.email

  2. 制作一个包含有效姓名和电子邮件的白名单。在服务器上的远程存储库中安装pre-receive挂钩。检查每次提交是否其作者和提交者的姓名和电子邮件都在白名单中。如果提交包含任何无效的名称或电子邮件,请拒绝推送和返回如何修复的说明。根据您的托管服务,挂钩可能具有不同的名称。

答案 1 :(得分:1)

GIT中

由于Git中的分布式特性,一个用户仍然可以使用用户ABC进行更改,将其直接推送给用户名为CBA的同事,然后该同事将更改推送到中央服务器。

中央服务器无法知道所有这些提交是否都是由用户ABC或CBA编写的,更不用说推送数据的用户是否是编写代码的用户

这就是服务器维护代码的Pusher的原因。

Git的解决方案是在分发之前使用GPG签署您的提交。只有拥有私钥的用户才能代表自己签署提交。他们也可以签署来自其他人的更改,基本上说明他们已经审核了代码。您已签署发布或在执行审核后确保一致性。超过该点的历史记录的任何更改都将使签名无效。我不建议签署每个提交,因为签名将在重新定位时中断,在压缩时可能会丢失。

无法强制执行作者是Git分布式特性的固有特征。

包含一个Windows Logon脚本可以相对容易地修补中央git配置文件以将用户名设置为您想要的用户名,这可能比预提交挂钩更容易。请致电:

$ git config --global user.name "User's Name"
$ git config --global user.email "name@domain"

TFVC

在TFVC中,还有一些模型可以使用Shelvesets将代码从一个dev移动到另一个dev。 Shelvesets可以由一个开发人员创建,由另一个开发人员取消,然后检入中央存储库。这也将注册作为作者办理登机手续的用户。不是代码的作者。

原因是TFVC没有区分作者和推动者。它假设两者始终相同。在许多情况下,这对Git来说并不适用。

TFVC签名也不像git提交那样可变,但是在使用API​​或Visual Studio UI之后可以很容易地改变提交消息。正如Checkin所说。

想一想

任何人都可以对USB密钥进行更改,移动到另一台计算机并将更改放在另一个用户的工作区中。您甚至可以通过电子邮件发送电子邮件,或者在代表其他人的TFS行为中获得正确的许可。

可能的选项

如前所述,您可以:

  • 在git中使用预提交钩子来检测git设置中名称/电子邮件的配置错误。
  • 通过政策
  • 自动设置正确的默认值
  • 使用服务器端服务挂钩自动标记包含不匹配的拉取请求(虽然我不会阻止它们,在中央仓库之外的作者之间共享代码是一个非常强大的协作选项)。
  • 使用自定义构建步骤在构建期间标记可疑更改,并且部分成功或明显无法构建。
  • 我怀疑你可以扩展git客户端(git可以通过这种方式配置)在执行提交时强制执行正确的名称,但这需要你分发自定义git配置。

Git没有内置措施来确保配置的名称与实际用户匹配。但它的影响可能是有限的。只要人们在推送之前审查其他人的更改,Pusher字段将反映谁决定实际将这些更改作为主存储库的一部分,无论编写代码的人是谁。在许多情况下,这是一个更重要的决定。

如果您现在正在做出选择,我建议不要使用TFVC。