代码所有者:从目录中排除组 (git)

Dim*_*ris 7 github

我的团队<team-1>正在与 共享 github 存储库<team-2>。该存储库看起来像这样(简化示例):

infrastructure/
       |
       |-- .github/CODEOWNERS 
       |
       |-- directory1/ 
               |
               |-- subdirectory1.1/
               |
               |-- subdirectory1.2/
              |
       |-- directory2/ 
               |
               |-- subdirectory2.1/
               |
               |-- subdirectory2.2/
              |
       |-- directory3/ 
               |
               |-- subdirectory3.1/
               |
               |-- subdirectory3.2/
       
Run Code Online (Sandbox Code Playgroud)

<team-2>是存储库中每个目录的 CODEOWNER,我的团队<team-1>仅拥有subdirectory1.1subdirectory2.1.

换句话说,CODEOWNERS 文件看起来像这样:

github/代码所有者

* @mycompany/team2
/infrastructure/directory1/subdirectory1.1 @mycompany/team1
/infrastructure/directory2/subdirectory2.1 @mycompany/team1
Run Code Online (Sandbox Code Playgroud)

鉴于上述情况,我想要做的是team2从 team1 拥有的每个文件夹中排除,最好不要删除 codeowners 文件中的通配符。

* @mycompany/team2
/infrastructure/directory1/subdirectory1.1 @mycompany/team1 AND EXCLUDE TEAM2
/infrastructure/directory2/subdirectory2.1 @mycompany/team1 AND EXCLUDE TEAM2
Run Code Online (Sandbox Code Playgroud)

在不重写整个代码所有者逻辑的情况下,最好的方法是什么?

Von*_*onC 0

GitHub 本机选项:GitHub Action

您可以尝试配置 GitHub Action ,它可以根据指定的检查mszostok/codeowners-validator来验证 GitHub文件。CODEOWNERS

例如:

notowned:报告给定存储库是否包含文件中没有指定所有者的文件CODEOWNERS


非 GitHUb 本机选项

硅藻土

如果“代码所有者”指的是对文件夹的推送/写入访问权限,则 Git 或 GitHub 本身不支持此功能:如果您可以推送到存储库的一部分,则可以推送到整个存储库。

您可能会考虑推送到您控制的服务器上的中间网关存储库,并且您可以在其中设置授权层,例如gitolite

使用 Gitolite,您可以使用 VREF 通过更改的目录和文件的名称来限制推送。

在你的情况下:

repo foo
        RW+                             =   @team2
        R                               =   @team1

        RW   VREF/NAME/infrastructure/directory1/subdirectory1.1 @team1
        RW   VREF/NAME/infrastructure/directory1/subdirectory2.1 @team1
Run Code Online (Sandbox Code Playgroud)

一旦推送经过 Gitolite 验证,同一台服务器就可以依次推送到 GitHub。


拆分存储库和 git filter-repo

但更自然的方法是将存储库分成两部分,引用主父 teeam2 存储库中的 team1 内容作为子模块
但这并不容易,因为它涉及历史重写和文件夹重组。