我正在服务器上,多个用户可以在一台计算机上访问相同的文件。我不想在网上托管任何东西,所以一切都应该是本地的。
我有一个中心裸地Code_bare
克隆,其中包含稳定版本Code_stable
,然后是特定于用户的开发分支:Code_UserA
,Code_UserB
...
如何限制从用户分支到裸存储库的推送权限?我不能/不能使用GitHub因为安全性而想避免支付订阅GitLabs的费用。
答案 0 :(得分:0)
听起来你已经排除了为你的原始回购使用托管环境。虽然有许多托管软件的选项,并且这些选项具有更易于管理访问控制的用户友好界面(其中包括),但它们并不适合所有人。因此,在这种情况下,您可能会使用预接收挂钩来进行访问控制。
钩子只是在特定时间运行的脚本。当有人推送回购时,预接收挂钩会运行,其退出状态决定是否接受推送。
然后,第一个挑战是如何对用户进行身份验证(因为提交者姓名和电子邮件之类的内容由客户自行决定)。我想最简单的选择是只接受已由master
上的特定用户签名的提交,但如果您不打算使用签名,这可能看起来有点过分。另一个选择是只接受ssh的推送,在这种情况下我相信你可以从环境变量中获取用户名。
一旦您对用户进行了身份验证,您就可以检查master
(或您要保护的任何其他分支)是否在更新的refs列表中,如果是,则决定是否接受推送根据您的授权规则。
但要明确的是,这种方法都是“将一个脚本放在一起”; git对此的支持仅限于“它将在决定是否接受推送之前执行您提供的脚本”。这让我们回到了使用托管软件的优势。