GIT支持基于分支的用户授权 - 最佳实践或工具?

时间:2011-02-23 21:03:41

标签: security git code-access-security git-branch

对于基于产品的GIT存储库,其中有维护,测试和未来开发的分支,如何控制用户对这些分支的访问。通过访问,我的意思是即使其他人可能从中读取,他们也不应该无意中将更改推送到回购。

例如,

A - B - C - D - E - F -> master
    |   |       |
    V1  V2'     exp
        |
        V2

“B”是用于带有标记V1的Branch的提交 - 用于产品的已发布版本。只有支持/维护工程师才能访问此项。

C用于最近冻结的预发布产品V2',并且应该只允许关键的show-stopper错误修复,因此只有某些开发人员和测试团队才能访问它。当V2从该分支释放时,只有支持应该像V1那样访问它。

E用于分支测试未来V3的新功能 - 只有开发人员而非支持者才能访问它。

“主”更改只应由中央集成团队在请求的基础上合并(类似于GitHub)。

如何用git实现上述目标?我记得看过gitosis和其他一些外部工具 - 这些对于使用git进行安全操作至关重要,还是有其他最佳实践?

感谢。

ADDED Gitflow best practice branching model

2 个答案:

答案 0 :(得分:11)

限制对回购(或分支甚至目录)的推送访问的另一种经典方法是使用 gitolite (实际上是 big gitosis的演变。

您可以在那里(在gitolite配置文件中)定义您需要的任何用户组或回购组,并关联RW访问权限。


注意:2013年8月:

  

我们已经发布了分支限制,可以通过存储库管理员“分支管理”屏幕进行配置。

Assembla provides such a protection as well(自2013年3月起)。

GitHub 还没有此功能
GitHub自2015年9月起就拥有该功能:请参阅“How to protect “master” in github?”。

答案 1 :(得分:1)

放置一个服务器端提交钩子,拒绝提交你需要只读的分支或者提交者是谁。

对于合并请求工作流,我们使用Gitorious的本地安装并通过其Web界面提交合并请求,并将main-line存储库限制到您的集成团队,其他所有人都可以从服务器端克隆工作然后将合并请求推送回主线存储库。

使用Gitorious,您不需要服务器端挂钩,只需要将main-line存储库的访问权限仅限于您想要提交的人。更简单,更容易维护。