如何判断推送来自哪个分支?

时间:2014-06-04 18:20:33

标签: git automation githooks

我试图通过仅允许来自master分支的push命令来限制推送到test分支。

如何判断push来自哪个分支?

2 个答案:

答案 0 :(得分:2)

您无法在接收和更新挂钩中使用传统方法。推动不要"来自"特别是在任何地方:钩子只需获取引用名称和SHA-1值的列表。

pre-receiveupdate次约会有机会批准或拒绝将标签refs/whatever更改为新的SHA-1的每个请求(在您需要的情况下,您需要)查看标签是否具体refs/heads/master)。 (pre-receiveupdate之间的区别在于前者获取stdin上的整个列表,包含旧的和新的SHA-1值,而后者一次获得一个更新作为参数,即,它为每个待更新的引用调用一次。单个push可以推送许多引用更新。pre-receive钩子可以验证整个集合,但只能说是的或者Nay到整体更新;如果它说是Yea,update挂钩可以单独验证每个更新,并分别对每个更新说Yea或Nay。)

在完成所有更新后调用post-receive挂钩,其中包含用于指向 oldsha X 的列表>现在指向 newsha "变化。

在所有情况下,没有源信息,只有原始SHA-1 - 这是有道理的,因为运行push命令的任何人都可以这样做:

git push remote 1234567:refs/tags/foo

例如,创建一个指向对象1234567的新标记,而不在其自己的仓库中实际拥有任何相应的标记。

为了使这类事情发挥作用,你可以完全拒绝推送到master,并改变进程:用户推送到其他一些分支(甚至是不同的存储库),一旦结果被审查,现在审查的提交通过其他方式(手动或自动合并,从成功)引入master

答案 1 :(得分:0)

最快的方法是使用gitk:http://git-scm.com/docs/gitk