git——锁定某些用户的主分支?

git——锁定某些用户的主分支?,git,branch,git-branch,branching-and-merging,Git,Branch,Git Branch,Branching And Merging,我想强制其他团队成员不要在主分支上工作,而是在开发分支上工作。我们有一个集中的git存储库,可以将我们的工作推到其中。我想知道是否有可能阻止用户将更改推送到主分支,但只允许某些用户这样做 我希望有以下“工作流程” 开发始终只与开发分支一起完成 发布经理负责主分支,只有他才可以将开发分支中的内容合并到主分支中,并将其推送到中央存储库上的主分支中 这可能吗?我如何实现这一点?请参阅:在共享回购中,您可以创建一个$(git rev parse--git dir)/hooks/pre receive

我想强制其他团队成员不要在主分支上工作,而是在开发分支上工作。我们有一个集中的git存储库,可以将我们的工作推到其中。我想知道是否有可能阻止用户将更改推送到主分支,但只允许某些用户这样做

我希望有以下“工作流程”

  • 开发始终只与开发分支一起完成
  • 发布经理负责主分支,只有他才可以将开发分支中的内容合并到主分支中,并将其推送到中央存储库上的主分支中

这可能吗?我如何实现这一点?

请参阅:在共享回购中,您可以创建一个
$(git rev parse--git dir)/hooks/pre receive
$(git rev parse--git dir)/hooks/update
脚本,用于验证用户试图推送到哪个引用。Git附带了一个执行按引用ACL的示例钩子。

我的低级方法只是让RM成为唯一一个具有SSH密钥的钩子,以推送到其他人用作主基线的存储库。这样,除了RM之外,没有人可以推动master,但是每个人都可以工作,因为他们有自己的本地开发分支,开发人员可以在他们之间共享他们喜欢的分支


下一步是制作一个烹饪锅测试仪,用于测试即将进入master的东西。这个pot通常被称为
next
dev
。这个想法是,一个分支的影响力越大,它在合并到主分支之前煮的时间就越长。这使RM能够完全控制哪些分支机构应该毕业,并且仍然让每个人都有机会。

访问控制从git外包给运行服务器的操作系统。如果您正在运行自己的服务器,我建议您安装gitosis:谢谢,我来看看gitosis……我想这正是因为
git
是分布式的,您不需要控制权限,因为不存在“共享”存储库?换句话说,在项目中工作的任何团队成员都将处理他们自己的存储库副本,并且是维护人员将分支合并到“主”存储库中(只是一个名称,不要与主分支混淆)。是的,也许我仍然非常喜欢集中思考(来自cvs和svn),但是:我们有一个中央存储库,每个开发人员都可以从中获取,例如主分支。但我不想让他们推。我认为这可以通过添加第三个存储库来处理,其中只有release manager可以访问,但我认为另一种方式更易于维护…谢谢。。。githooks似乎非常强大。我来看看gitosis和Gitooks,有人能详细介绍一下吗?我看了一下
[更新偏执狂](http://git.kernel.org/cgit/git/git.git/tree/contrib/hooks/update-paranoid?id=HEAD)
hook,但我不确定我是否理解多个用户的ACL是什么样子。是否预期一个用户将有多个允许提交者的条目,格式为:
committer=John Doe
,这可用于N个用户,如:`committer=John Doe committer=User2 committer=User3`?@b.long:
update paranoid
预期一个
users/${user}.acl
在每个SSH登录的
/vcs/acls.git
repo(不是此repo)中;在每一行中,可以有任意多的
committer=
行。但您可能需要修改或重写脚本以供自己使用。@ephemient,我明白了。所以,在本例中,${USER}是
git
用户(拥有存储库的用户),对吗?你是说这个钩子不一定是通用的吗?我在寻找一些通用的东西,它只允许我枚举可以在主分支上提交的用户(例如git流),而其他分支将保留默认配置。@b.long假设有一个设置,我推到
me@remote:/srv/git/repo.git
然后按到
you@remote:/srv/git/repo.git
(即使回购协议为其他人所有,只要有适当的权限和umask,这也是可能的)。然后,当我按下时,这个钩子会检查
me.acl
,当你按下时,这个钩子会检查
you.acl
。如果每个人都按
common@remote
,则每个人都可以在其提交中模拟其他人。此脚本可能不适合您(例如,它有硬编码的路径)但是你可以把它作为一个起点。谢谢。我也考虑过ssh,它会很容易安装。但是我认为应该有更好的方法?