【问题标题】:How would you authorize pushes only in certain directories with Gitolite? [closed]您将如何使用 Gitolite 仅在某些目录中授权推送? [关闭]
【发布时间】:2013-01-02 13:52:48
【问题描述】:

我有一个 symfony 项目的工作配置:

@admin = admin ku
@developer = sarhan dima_syrv sarhandom a_bobkov
@testers = novikov_d 

repo    dev
    - master = @admin @developer @testers
    RW+      =   @admin @developer
    RW+     =   jenkins ku
    RW      =   @testers

我想让测试人员组只能写入文件夹 Tests。 我正在做这个配置: @admin = 管理员库 @developer = sarhan dima_syrv sarhandom a_bobkov @testers = novikov_d

repo    dev
    - master = @admin @developer @testers
    RW      =   @admin @developer
    RW+     =   jenkins
    RW      =   @testers
    RW NAME/ =  @admin
    RW NAME/src =   @admin @developer
    RW NAME/src/.*/.*/Tests   =   @testers

我有一个 symfony 项目的工作配置 我想让测试人员组只能写入文件夹测试 我正在做这个配置 而且它只给了我部分解决方案,测试人员只能在Tests文件夹中写入,但没有人可以推送新分支,只能在旧分支中记录。如何让每个人都创建一个新的分支,而测试人员只能写入文件夹 Tests? 请帮帮我!

【问题讨论】:

  • 那么问题出在哪里?没有访问权限?
  • 抱歉问题已关闭。我怀疑那些“版主”对 git 了解不多,对 gitolite 更不了解。
  • @VonC 我怀疑这个问题已被关闭,因为评论非常简单:“但它不起作用。” OP 需要为此提供更多详细信息成为一个真正的问题。
  • @jlordo 我同意。但我更喜欢编辑和改进(因为我对 OP 中引用的主题了解很多)而不是关闭。
  • @VonC 如果 OP 添加一些相关信息,这个问题在重新打开队列中很有可能。你为什么不高兴它被关闭了,你已经写了一个详细的答案,并且OP有机会接受它。

标签: git chmod gitolite


【解决方案1】:

查看 VREF NAME,这是一个更新挂钩,如果您的提交影响了存储库中的错误目录或文件,它将拒绝您的推送。

参见“restricting pushes by dir/file name”(使用 gitolite 版本 3,或“g3”)。

"NAME" VREF 允许您通过更改的目录和文件的名称来限制推送。
(旁注:NAME VREF 是唯一直接在更新挂钩中实现的,因此您不会在 VREF 目录中找到它。

这是一个例子。假设您不希望初级开发人员将更改推送到 Makefile,因为它非常复杂:

repo foo
    RW+                             =   @senior_devs
    RW                              =   @junior_devs

    -   VREF/NAME/Makefile          =   @junior_devs

当高级开发人员推送时,VREF 根本不会被调用。但是当初级开发者推送时,VREF 会被调用,它会返回一个更改为 refs 的文件列表,如下所示:

VREF/NAME/file-1
VREF/NAME/dir-2/file-3
...etc...

每个引用都与访问规则匹配。
如果其中一个恰好是 Makefile,则返回的 ref (VREF/NAME/Makefile) 将匹配拒绝规则并终止推送。


因此,您需要进行一些试验以查看该挂钩是否支持您的确切方案,但这是 Gitolite 限制通过文件或目录名推送的官方方式。

【讨论】:

  • 我尝试了不同的配置,当我添加 VREF / NAME ... 或 NAME ... 任何参数时,无法推送
  • @user1943041 考虑我在回答中提到的链接的第二部分,然后:以“另一种使用方法是当您知道什么是允许的而不是不允许的”开头的部分:这可能更适合您的需求。
【解决方案2】:

简短的回答:你不能这样做。一个 git 存储库就是全部内容。

唯一的解决方案是将您的测试源放在另一个存储库中(并使用子模块)。

【讨论】:

    猜你喜欢
    • 2011-12-23
    • 2013-05-23
    • 2013-10-07
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    相关资源
    最近更新 更多