通过仅拒绝几个文件夹并允许所有其他文件夹来在 git 中强制执行用户 ACL



我已经使用 Git Hooks 部分中提到的所有必要的钩子实现了一个 git 服务器。在此链接中为用户ACL实现服务器端钩子时,我遇到了以下问题:

  • 我在存储库中有 130 个文件夹,但我只想拒绝访问此存储库中的 2 个文件夹,并允许访问所有其他文件夹。
  • 为此,在"acl_file"中,我添加了指定格式的所有文件夹名称。因此,此文件中有 130 个文件夹,很难检查每个文件夹的条目中是否有用户可用。
  • 另外,我无法继续检查哪个开发人员正在签入哪个文件夹中的文件。

我想要的是,有没有办法简单地在这个"acl_file"中提供一个条目,以便所有用户都可以访问除必须限制访问的两个特殊文件夹之外的所有文件夹?

注意:

我试图通过给出以下行来提供所有文件夹的可用性:

可用|用户1,用户2| - 授予对所有文件夹的权限

unavail|user1|xyz - 拒绝对 xyz 文件夹的权限。

但是user1可以访问xyz文件夹,即使我已经对该文件夹不可用。

由于这不起作用,任何人都可以提供一种替代方法,提供对存储库中所有文件夹的访问权限并单独拒绝任何特定文件夹的权限吗?

另一种

方法是使用另一种工具:gitolite(一个Perl脚本,它将与你的git服务器一起运行,并由你的字体端侦听器调用,如Apache Server)。

Gitolite 是一个授权层,它通过 VREF(更新钩子)管理各种 ACL,包括文件夹管理。

VREF 页面包含以下示例:

另一种使用方法是当您知道允许的内容而不是不允许的内容时
假设QA人员只允许触摸名为CHANGELOG的文件和名为ReleaseNotes的目录中的任何文件:

repo foo
        RW+                             =   @senior_devs
        RW                              =   @junior_devs
        RW+                             =   QA-guy
        RW+ VREF/NAME/CHANGELOG         =   QA-guy
        RW+ VREF/NAME/ReleaseNotes/     =   QA-guy
        -   VREF/NAME/                  =   QA-guy

VREF是一个钩子(由gitolite管理),所以VREF/NAME非常适合文件/文件夹限制。

Git 不支持一个仓库中的 acl。

要为不同的数据提供不同的访问级别,您需要将其拆分到不同的存储库中。
之后,你将能够单独控制对每个存储库的访问。

现在,要将所有这些数据收集到一个文件夹中,您需要使用 Git 子模块。

最新更新