我的 git 存储库中有四个分支,使用 GitHub 进行管理:
有没有办法限制对单个分支([人名]-开发)的写访问?我该怎么做?
供参考,类似的问题:如何编写 git hook 来限制写入分支?。
使用 GitHub 时,最好的选择是让每个开发人员拥有自己的主存储库分支。每个人都推送到自己的存储库,并且对主存储库具有推送访问权限的人负责从每个开发人员的存储库中拉取。这就是大多数开源项目的工作方式。
如果使用自己的 Git 服务器,应该可以使用钩子来防止用户推送到错误的分支。
受保护的分支和所需的状态检查(2015 年 9 月 3 日)不会完全允许单个分支(“[人名]-开发”),但它会被克隆。
分支将受到保护:
保护您的代码。
Esko 建议了适合开源项目的出色解决方案。然而,它要求协作者团队的每个成员在 GitHub 上都有一个付费帐户,但这并不总是正确的。
VonC 指出还有另一种解决方案,只涉及一个付费 GitHub 帐户。我将提供一些如何实现 VonC 解决方案的教程。
假设我们有两个私有存储库:test-test
和
test-production
。第一个存储库用于开发,团队的每个成员都可以访问它。第二个存储库用于自动部署代码,因此对其应用了严格的访问限制。开发人员的设置非常简单明了:
git clone https://github.com/<username>/test-test
,完成他们的工作并将其推迟。协作者的设置有点复杂:
git clone https://github.com/<username>/test-test
git remote add production-repo https://github.com/<username>/test-production.git
git fetch production-repo
git checkout -b local-production
git branch -u production-repo/production
git pull
local-production
分支推送的所有内容都将进入
test-production
存储库,其他分支将被推送到
test-test
存储库。
好吧,这很酷,但是更细粒度的([人名]-开发)访问怎么样? - 您可能会问。答案是:您可以为每个开发人员创建类似于 test-test
的存储库,并使用相同的模式来设置它们。这种方法的缺点是协作者必须克隆每个
test-test-[person's name]-development
存储库。
VonC 还建议分叉 production
存储库并向其发出拉取请求 - 为什么不这样做?首先,因为如果没有付费 GitHub 帐户,你就无法分叉私人存储库。其次,为了允许某人分叉一个“私有”存储库,您需要给他完全访问权限,这样他就可以直接推送它。开发人员可能会犯一个错误,推送到
production
存储库,启动 GitHub 服务挂钩,然后把事情搞砸。如果您使用多个外包开发人员,则可能会发生这种情况。
此外,我还想警告您有关 Windows 官方 GitHub 应用程序中的bug 功能。上游与原点不同的分支将进入原点。所以使用命令行来推送。
所有这些事情听起来有点过于复杂。但如果你不想为简单性付出代价,那就总是这样。
与 GitLab 一样,BitBucket.org 也有分支限制功能。