在 GitHub 上赋予项目文件夹权限

29

在这个项目中,我有10个主要文件夹,我希望外部团队只能访问我的git仓库中的一个子文件夹,以便他们可以进行更改并提交拉取请求。

有没有办法做到这一点?如果没有,你能否提供更好的方法?

3个回答

15

GitHub仓库中没有默认的访问权限机制。

使用子模块

使用子模块可以解决问题,并且非常容易设置。您可以完全授权客户对子模块存储库进行访问,同时将其添加到主项目存储库中。

请注意,StackOverflow问题“在GitHub上使用他人的Repo作为Git Submodule”及其答案也值得一读。

这是我认为最简单和直接的方法。

使用Webhook

如果您真的不想使用子模块,仍然可以通过创建一个实现此机制的GitHub webhook来限制访问权限。Git SCM文档解释了如何完成这一部分。

9

使用 "codeowners" 功能

这个功能对于公共仓库是免费的,对于私有仓库则需要付费。

步骤 1:定义代码所有者

通过在你的仓库根目录下添加一个名为 CODEOWNERS 的文件来定义代码所有者。

语法:

# <directory or file filter> <user or group>

# Examples:

README.md @octocat
/veryimportant/ @myorganization/teamname

文档链接:https://docs.github.com/zh/github/creating-cloning-and-archiving-repositories/about-code-owners

步骤2: 限制拉取请求

有了付费的 Github 订阅,可以按照以下方式限制拉取请求,即在合并之前需要代码所有者进行审核:

enter image description here

结果

配置完成后,对于已经通过CODEOWNERS文件配置的位置、文件或目录发生变化的拉取请求需要经过代码所有者审核。截图如下:

enter image description here

步骤3:限制管理员

管理员和拥有者仍然可以直接提交到 master 分支。因此建议将分支限制应用于管理员。步骤如下:

enter image description here


0

通过具有 Sparse checkout 和 partial clones 的现代 Git,我相信可以使用某种 Git 钩子来实现。我在这里运行了一些实验here,其中我使用了某种 Git 钩子和 HTTP 反向代理 + 使用 Git sparse checkout 来允许仅访问特定的子文件夹。不过这只是一个实验。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接