一种限制Git分支访问的方法?

时间:2012-01-08 20:54:13

标签: git github

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

  • 生产
  • 分段
  • [人名] - 发展

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

供参考,类似的问题:How to write a git hook to restrict writing to branch?

9 个答案:

答案 0 :(得分:47)

使用GitHub时,您最好的选择是让每个开发人员拥有自己的主存储库分支。每个人都推送到他们自己的存储库,并且有人通过推送访问主存储库来处理每个开发人员的存储库。这就是大多数开源项目的工作方式。

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

答案 1 :(得分:15)

GitHub为以前的组织restrict which users can push to a branch添加了this year的功能。

restrict branch

答案 2 :(得分:11)

注意:Protected branches and required status checks(2015年9月3日)赢得完全允许单个分支(" [人名] - 开发&#34 ;),但它正在克隆。

分支机构将受到保护:

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

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

答案 3 :(得分:10)

您可能想要查看GitLab及其受保护的分支机构"特征。我认为它正是你正在寻找的。见Keeping your code protected

答案 4 :(得分:7)

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

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

我们假设我们有两个私有存储库:test-testtest-production。第一个回购用于开发,团队的每个成员都可以访问它。第二个回购用于自动部署代码,因此对其应用了强大的访问限制。

开发人员的设置非常简单明了:git clone https://github.com/<username>/test-test,做他们的工作并推回去。

协作者的设置有点复杂:

  1. 从开发回购git clone https://github.com/<username>/test-test

  2. 中提取分支
  3. 添加远程存储库git remote add production-repo https://github.com/<username>/test-production.git

  4. 从新回购git fetch production-repo

  5. 获取数据
  6. 为生产代码创建新的本地分支并切换到git checkout -b local-production

  7. 告诉git链接本地和远程分支git branch -u production-repo/production

  8. 将远程制作分支的内容下载到本地git pull

  9. 排除可能发生的冲突及其后的冲突!

  10. 现在从local-production分支推送的所有内容都将进入test-production回购,其他分支将被推送到test-test回购。

    好的,这很酷,但更精细([人名] - 开发)访问呢? - 您可能会问。答案是:您可以为每个开发人员创建类似于test-test的回购,并使用相同的模式进行设置。这种方法的缺点是合作者必须克隆每个test-test-[person's name]-development回购。

    VonC还建议分叉production repo并向它发出拉取请求 - 为什么不这样做?首先,因为你不能分叉私人仓库没有支付GitHub帐户。其次,为了允许某人分叉私人回购,你可以给他完全访问权限,这样他就可以直接推送它。并且开发人员可能会犯错误,推送到production repo启动GitHub服务挂钩并搞砸了。如果您使用多个外包开发人员,可能会发生这种情况。

    此外,我还想提醒您关于Windows官方GitHub应用中的 bug 功能。上游与原点不同的分支将进入原点。因此,使用命令行进行推送。

    所有这些事情听起来有点过于复杂。但如果你不想为简单付钱,那就总是那样。

答案 5 :(得分:5)

与GitLab一样,BitBucket.org也有分支限制功能。

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

答案 6 :(得分:1)

在Bitbucket版本中( Bitbucket v4.9.1 )您可以通过以下方式限制更改:

  1. 分行名称
  2. 分支名称模式
  3. 分支名称建模
  4. 以下行动可以限制:

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

      enter image description here enter image description here

答案 7 :(得分:0)

不实际。 Git分支并没有像你可能认为的那样彼此截然不同。

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

答案 8 :(得分:0)

如果你使用bitbucket - 有处理它的分支权限。 https://confluence.atlassian.com/bitbucket/branch-permissions-385912271.html