一种限制Git分支访问的方法?
我在我的git仓库中有四个分支,它使用GitHub进行pipe理:
- 生产
- 分期
- 主
- [人的名字] – 发展
有没有办法限制写访问只有一个分支([人的名字] – 发展)? 我将如何做到这一点?
作为参考,一个类似的问题: 如何编写一个git钩子来限制写入分支? 。
在使用GitHub时,最好的select是让每个开发人员拥有自己的主存储库分支。 每个人都会推送他们自己的仓库,而有人通过推送访问主仓库来处理每个开发人员的仓库。 这是大多数开源项目的工作原理。
如果使用自己的Git服务器,应该可以使用钩子来防止用户推送错误的分支。
注意: 受保护的分支机构和必要的状态检查 (2015年9月3日)不会完全允许一个分支机构(“[人名] – 开发”),但它正在克隆。
该分支将受到保护:
- 反对被迫推
- 反对删除
- 直到所需的状态检查通过为止
GitHub增加了限制哪些用户可以在 今年早些时候推送到组织的分支的function。
您可能想要查看GitLab及其“受保护的分支”function。 我认为这正是你正在寻找的。 请参阅保护您的代码 。
Eskobuild议适用于开源项目的最佳解决scheme。 但是,它要求协作者团队的每个成员在GitHub上都有一个付费帐户,这并不总是正确的。
VonC指出,还有一种解决scheme只涉及一个付费的GitHub账户。 我将提供一些如何实施VonC解决scheme的教程。
假设我们有两个私有存储库: 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
提取数据 -
为生产代码创build新的本地分支并切换到它
git checkout -b local-production
-
告诉git连接本地和远程分支
git branch -u production-repo/production
-
将远程生产分支的内容下载到本地的一个
git pull
-
分清可能的冲突,就是这样!
现在,从local-production
分支推出的所有东西都将进入test-production
回购,而其他分支将被推到test-test
回购。
好吧,这很酷,但更细粒度([人的名字] – 发展)访问呢? – 你可能会问。 答案是:您可以为每个开发人员创build类似于test-test
回收站,并使用相同的模式进行设置。 这种方法的缺点是,合作者将不得不克隆test-test-[person's name]-development
回购。
VonC还build议分叉production
回购,并提出要求 – 为什么不这样做呢? 首先,因为你不能在没有付费的GitHub帐户的情况下分发私人回购。 其次,为了允许某人发布一个私人回购协议,你可以给他充分的访问权限,所以他可以直接推送。 而开发人员可能会犯一个错误,推到production
回购启动GitHub服务钩子和搞砸事情。 如果你使用几个外包开发人员,这可能会发生。
此外,我想警告您在Windows官方GitHub应用程序中的bugfunction。 上游不同于原产地的分支将进入原产地。 所以使用命令行进行推送。
所有这些事情听起来有点过于复杂。 但总是这样,如果你不想为简单付费。
和GitLab一样,BitBucket.org也有分支限制function。
http://blog.bitbucket.org/2013/09/16/take-control-with-branch-restrictions/
不是几乎。 Git分支并没有像你可能认为的那样真正地区分开来。
你可能想在这里做的是为每个用户的开发分支使用一个单独的存储库。
如果你使用bitbucket – 有分支权限来处理。 https://confluence.atlassian.com/bitbucket/branch-permissions-385912271.html