我们目前正在项目中使用git进行版本控制。开发环境是一个内部网(带有AD的Windows服务器),无法访问Internet。有没有办法配置git使用开发人员'作者和提交者的域登录?我们希望阻止开发人员自己提供这些信息。谷歌在搜索问题时发现了这一点:
https://docs.microsoft.com/en-us/vsts/tfvc/comparison-git-tfvc
对于可审计性,它声明了git: "您可以识别哪个用户推送了提交。 (任何人都可以声明作为作者或提交者的任何身份。)您可以确定何时进行了更改,使用历史记录,比较和注释进行了更改。"
对于TFVC: "由于您的团队将所有工作都检入集中式系统,因此您可以确定在变更集中签入的用户,并使用比较来查看他们更改的内容。查看文件,您可以对其进行注释,以确定谁更改了代码块,以及何时更改了代码。"
纯粹基于这些文本,我们似乎应该转向TFVC。
我错过了什么?
答案 0 :(得分:1)
告诉会员如何使用正确的值配置user.name
和user.email
。
制作一个包含有效姓名和电子邮件的白名单。在服务器上的远程存储库中安装pre-receive
挂钩。检查每次提交是否其作者和提交者的姓名和电子邮件都在白名单中。如果提交包含任何无效的名称或电子邮件,请拒绝推送和返回如何修复的说明。根据您的托管服务,挂钩可能具有不同的名称。
答案 1 :(得分:1)
由于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中,还有一些模型可以使用Shelvesets将代码从一个dev移动到另一个dev。 Shelvesets可以由一个开发人员创建,由另一个开发人员取消,然后检入中央存储库。这也将注册作为作者办理登机手续的用户。不是代码的作者。
原因是TFVC没有区分作者和推动者。它假设两者始终相同。在许多情况下,这对Git来说并不适用。
TFVC签名也不像git提交那样可变,但是在使用API或Visual Studio UI之后可以很容易地改变提交消息。正如Checkin所说。
任何人都可以对USB密钥进行更改,移动到另一台计算机并将更改放在另一个用户的工作区中。您甚至可以通过电子邮件发送电子邮件,或者在代表其他人的TFS行为中获得正确的许可。
如前所述,您可以:
Git没有内置措施来确保配置的名称与实际用户匹配。但它的影响可能是有限的。只要人们在推送之前审查其他人的更改,Pusher字段将反映谁决定实际将这些更改作为主存储库的一部分,无论编写代码的人是谁。在许多情况下,这是一个更重要的决定。
如果您现在正在做出选择,我建议不要使用TFVC。