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

Dav*_*542 67 git github

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

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

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

供参考,一个类似的问题:如何编写一个git钩子来限制写入分支?.

Esk*_*ola 47

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

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


oso*_*kit 15

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

限制分支


Von*_*onC 11

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

分支机构将受到保护:

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

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


cdm*_*dmo 10

您可能想要查看GitLab及其"受保护的分支"功能.我认为这正是你正在寻找的.请参阅保护您的代码.


小智 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. 添加远程存储库 git remote add production-repo https://github.com/<username>/test-production.git

  3. 从新的repo中获取数据 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帐户就无法分叉私人仓库.其次,为了允许某人分叉私人仓库,你可以让他完全访问它,这样他就可以直接推送它.而开发人员可能会犯错误,推动productionrepo启动GitHub服务挂钩并搞砸了.如果您使用多个外包开发人员,这可能会发生.

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

所有这些听起来都有些过于复杂.但如果你不想为简单付出代价就总是这样.

  • 我认为您绝对可以使用非付费帐户分配私人仓库,并且它仍然是私有的. (9认同)

Oli*_*Oli 5

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

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