我的git仓库中有四个分支,使用GitHub进行管理:
- 生产
- 分期
- 主
- [人名]-发展
有没有办法将写访问权限限制为仅一个分支([人的名字]-开发)?我该怎么做?
作为参考,有一个类似的问题:如何编写git钩子以限制写入分支?。
我的git仓库中有四个分支,使用GitHub进行管理:
有没有办法将写访问权限限制为仅一个分支([人的名字]-开发)?我该怎么做?
作为参考,有一个类似的问题:如何编写git钩子以限制写入分支?。
Answers:
使用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链接本地和远程分支 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应用中的错误功能。上游不同于原点的分支将进入原点。因此,请使用命令行进行推送。
所有这些事情听起来都有些复杂。但是,如果您不想为简单而付出代价,那就总是这样。
与GitLab一样,BitBucket.org也具有分支限制功能。
http://blog.bitbucket.org/2013/09/16/take-control-with-branch-restrictions/
如果您使用bitbucket,则有分支权限来处理。 https://confluence.atlassian.com/bitbucket/branch-permissions-385912271.html