限制 Git 分支访问的方法?

问题描述 投票:0回答:8

我的 git 存储库中有四个分支,使用 GitHub 进行管理:

  • 生产
  • 分期
  • 大师
  • [人名]-发展

有没有办法限制对单个分支([人名]-开发)的写访问?我该怎么做?

供参考,类似的问题:如何编写 git hook 来限制写入分支?

git github
8个回答
49
投票

使用 GitHub 时,最好的选择是让每个开发人员拥有自己的主存储库分支。每个人都推送到自己的存储库,并且对主存储库具有推送访问权限的人负责从每个开发人员的存储库中拉取。这就是大多数开源项目的工作方式。

如果使用自己的 Git 服务器,应该可以使用钩子来防止用户推送到错误的分支。


20
投票

GitHub 在今年早些时候添加了功能来限制哪些用户可以推送到组织的分支

restrict branch


11
投票
注意:

受保护的分支和所需的状态检查(2015 年 9 月 3 日)不会完全允许单个分支(“[人名]-开发”),但它会被克隆。

分支将受到保护:

    对抗强推
  • 反对删除
  • 反对合并更改,直到通过所需的状态检查

https://cloud.githubusercontent.com/assets/25792/9596474/27db3ce6-502a-11e5-9b19-5b47a8addc65.png


10
投票
您可能想查看 GitLab 及其“受保护分支”功能。我认为这正是您正在寻找的。请参阅

保护您的代码


7
投票

Esko 建议了适合开源项目的出色解决方案。然而,它要求协作者团队的每个成员在 GitHub 上都有一个付费帐户,但这并不总是正确的。

VonC 指出还有另一种解决方案,只涉及一个付费 GitHub 帐户。我将提供一些如何实现 VonC 解决方案的教程。

假设我们有两个私有存储库:

test-test

test-production
。第一个存储库用于开发,团队的每个成员都可以访问它。第二个存储库用于自动部署代码,因此对其应用了严格的访问限制。

开发人员的设置非常简单明了:

git clone https://github.com/<username>/test-test

,完成他们的工作并将其推迟。

协作者的设置有点复杂:

  1. 从开发仓库中拉出分支

    git clone https://github.com/<username>/test-test

  2. 添加远程仓库

    git remote add production-repo https://github.com/<username>/test-production.git

  3. 从新存储库获取数据

    git fetch production-repo

  4. 为生产代码创建新的本地分支并切换到它

    git checkout -b local-production

  5. 告诉git链接本地和远程分支

    git branch -u production-repo/production

  6. 将远程生产分支的内容下载到本地

    git pull

  7. 解决可能的冲突就这样!

现在从

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 也有分支限制功能。

4
投票

http://blog.bitbucket.org/2013/09/16/take-control-with-branch-restrictions/

在 Bitbucket 版本 (

1
投票
) 中,您可以通过以下方式限制更改:

分行名称

    分公司名称模式
  1. 分公司名称造型
  2. 可以限制以下操作:

防止所有更改

    防止删除
  1. 防止重写历史
  2. 防止在没有拉取请求的情况下进行更改
  3. 输入例外的用户;

enter image description here enter image description here

实际上并非如此。 Git 分支之间的区别并不像您可能认为的那样。

0
投票
您可能想要做的是为每个用户的开发分支使用单独的存储库。

© www.soinside.com 2019 - 2024. All rights reserved.