github - CODEOWNERS:从目录中排除组(git)
问题描述
我的团队<team-1>
正在与<team-2>
. 回购看起来像这样(简化示例):
infrastructure/
|
|-- .github/CODEOWNERS
|
|-- directory1/
|
|-- subdirectory1.1/
|
|-- subdirectory1.2/
|
|-- directory2/
|
|-- subdirectory2.1/
|
|-- subdirectory2.2/
|
|-- directory3/
|
|-- subdirectory3.1/
|
|-- subdirectory3.2/
<team-2>
是 repo 中每个目录的 CODEOWNER,我的团队<team-1>
只拥有subdirectory1.1
和subdirectory2.1
.
换句话说,CODEOWNERS 文件看起来像这样:
github/代码所有者
* @mycompany/team2
/infrastructure/directory1/subdirectory1.1 @mycompany/team1
/infrastructure/directory1/subdirectory1.1 @mycompany/team1
鉴于上述情况,我想做的是team2
从 team1 拥有的每个文件夹中排除,理想情况下不删除 codeowners 文件中的通配符。
* @mycompany/team2
/infrastructure/directory1/subdirectory1.1 @mycompany/team1 AND EXCLUDE TEAM2
/infrastructure/directory1/subdirectory1.1 @mycompany/team1 AND EXCLUDE TEAM2
在不重写整个代码所有者逻辑的情况下,最好的方法是什么?
解决方案
如果“代码所有者”是指对文件夹的推送/写入访问权限,则 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
一旦 Gitolite 验证了推送,同一台服务器就可以反过来推送到 GitHub。
但更自然的方法是将存储库一分为二,将主父 teeam2 存储库中的 team1 内容引用为submodule。
但这并不容易,考虑到它会涉及历史重写和文件夹重组。
推荐阅读
- python - Hackerrank Caesar Cipher Python 解决方案
- google-apps-script - 在谷歌表格上运行谷歌应用脚本时,它是运行一个应用脚本文件,还是可以运行多个文件?
- javascript - React Native 倒数计时器减少了文本输入焦点
- json - 更改 minecraft 版本的显示名称
- javascript - Next JS API Routes 在客户端添加查询
- typescript - 预期的参数,但在 TypeScript 的扩展类调用中得到 0
- windows - Visual Studio:错误 DEP0700:应用注册失败。[0x80073D1F]
- javascript - 如何减去特定的部分时间javascript momentjs
- wordpress - 如何存储多个用户条目
- c# - c#中类型或成员的声明顺序