我们有一个git遥控器(用于生产(,使用openshift。
在本地,我想确保只能将主分支推到此遥控器上。我应该采取任何特殊步骤来确保发生这种情况,还是应该依靠git默认值?
我99%肯定的是,生产GIT遥控器仅着眼于主分支。因此,我的理解是,我们在本地推动其他分支的唯一方法就是:
git push prod_remote a_feature_branch:master
所以我的问题是 - 有没有办法阻止我团队中的某人这样做(没有武力旗(?
在接收方面,接收提交的git具有分支名称的 no notion (如果有的话(在发送git上。它所知道的是,它已收到一些对象,然后请求更新一些引用。如果这些引用是拼写的refs/heads/whatever
,则它们是分支名称,删除或更新的分支操作,该分支 whatever
。
因此,在接收方面,答案是否:没有办法阻止任何人这样做。如果他们完全可以将提交交付给接收git,他们可以交付任何提交和所喜欢的参考名称更新。您可以使用留下的任何身份验证数据(例如,从SSH或Gitolite(例如Gitolite((来检查提交和/或参考名称更新,但是您对其 Origin 一无所知,您有仅哈希ID和名称。
在发送方面,您可以使用pre-push
挂钩做更多的事情。前挂钩的运行:
-
$1
:遥控器的名称,如果推送使用命名遥控器; -
$2
:对应于$1
的URL
(如果不使用命名遥控器,两个命令行参数是相同的(,并且在标准输入中,一条线,每行push
refspec一行,每行都有四个项目:
- 本地参考(例如
refs/heads/branch
( - 本地哈希ID
- 远程参考
- 远程哈希ID
(有关详细信息,请参见Githooks文档(。但是,由于每个人都可以完全控制其存储库,因此发送侧挂钩取决于每个发件人,因此,是否调用任何挂钩。
如果每个人都会自愿选择的人,您可以为它们提供一个钩子:
:- 检查远程名称(
$1
(和/或URL($2
(; - 如果与您要保护的存储库相匹配,请检查输入流上的任何远程参考匹配
refs/heads/master
; - 如果所有这些检查都适用,请以任何方式检查相应的本地参考和/或哈希。