我的团队<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.1和subdirectory2.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)
在不重写整个代码所有者逻辑的情况下,最好的方法是什么?
您可以尝试配置 GitHub Action ,它可以根据指定的检查mszostok/codeowners-validator来验证 GitHub文件。CODEOWNERS
例如:
notowned:报告给定存储库是否包含文件中没有指定所有者的文件CODEOWNERS。
如果“代码所有者”指的是对文件夹的推送/写入访问权限,则 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。
但更自然的方法是将存储库分成两部分,引用主父 teeam2 存储库中的 team1 内容作为子模块。
但这并不容易,因为它涉及历史重写和文件夹重组。
| 归档时间: |
|
| 查看次数: |
5022 次 |
| 最近记录: |