在这个项目中,我有10个主要文件夹,我希望外部团队只能访问我的git仓库中的一个子文件夹,以便他们可以进行更改并提交拉取请求。
有没有办法做到这一点?如果没有,你能否提供更好的方法?
在这个项目中,我有10个主要文件夹,我希望外部团队只能访问我的git仓库中的一个子文件夹,以便他们可以进行更改并提交拉取请求。
有没有办法做到这一点?如果没有,你能否提供更好的方法?
GitHub仓库中没有默认的访问权限机制。
使用子模块可以解决问题,并且非常容易设置。您可以完全授权客户对子模块存储库进行访问,同时将其添加到主项目存储库中。
请注意,StackOverflow问题“在GitHub上使用他人的Repo作为Git Submodule”及其答案也值得一读。
这是我认为最简单和直接的方法。
这个功能对于公共仓库是免费的,对于私有仓库则需要付费。
通过在你的仓库根目录下添加一个名为 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
有了付费的 Github 订阅,可以按照以下方式限制拉取请求,即在合并之前需要代码所有者进行审核:
配置完成后,对于已经通过CODEOWNERS
文件配置的位置、文件或目录发生变化的拉取请求需要经过代码所有者审核。截图如下:
管理员和拥有者仍然可以直接提交到 master
分支。因此建议将分支限制应用于管理员。步骤如下:
通过具有 Sparse checkout 和 partial clones 的现代 Git,我相信可以使用某种 Git 钩子来实现。我在这里运行了一些实验here,其中我使用了某种 Git 钩子和 HTTP 反向代理 + 使用 Git sparse checkout 来允许仅访问特定的子文件夹。不过这只是一个实验。