2017-05-24 55 views
0

我有两个遥控器,一个用于生产,一个用于GitHub。由于我必须将某些文件推送到不能登陆GitHub的作品,因此我想限制一个分支以避免发生意外。限制推送某个分支的某些遥控器

有没有办法告诉我的混帐客户端,它应该从未分支“部署”推到远程“github上”,只有推动这个分支“生产”?

回答

2

kowsky's answer是正确的,只要你的Git至少是1.8.2(如果不是你应该升级:-))。但是,链接的例子是错误的。

pre-push hook被调用,有两个参数,其中规定:

  • 遥控器的名称,如果指定的远程使用,否则URL
  • 的URL(的扩展名为远程结果,如果一个名为远程使用)

什么是要推,这是你在你运行git push时指定的东西,提供给钩的标准输入。这是两个链接的例子都被破坏的地方。

如果你运行:

git push github refspec1 refspec2 ... refspecN 

则引用(一个或多个)被推那些命令行给出。

如果你运行:

git push github 

(无refspecs),该组支路以推...嗯,这是复杂的,但在现代 Git的,则默认为当前分支。

将样品推预钩假设当前分支是被推动。由于这是现代默认情况下,样品可能会工作,直到你意外地运行:

git push github deploy 

(而上,比如说,master),然后他们不会和你可能会难过。 :-)

要解决这些问题,请使用githook读取,例如:

#! /bin/sh 
[ "$1" = github ] || exit 0 # allow if not pushing to github 
while read lref lhash rref rhash; do 
    case "$lref" in 
    refs/heads/deploy) 
     echo "error: attempt to push 'deploy' branch to github" 1>&2 
     exit 1;; 
    esac 
done 

这将使:

git push github master:deploy 

(用来创建和远程github更新了deploy,但使用本地分支master,不当地分支deploy),同时禁止:

git push github deploy:oops 

(其中将本地deploy推送到名为oops的分支)。

如果你希望有更复杂的规则,写下来。请注意,如果您想防止使用git push https://github.com/...绕过您自己的挂钩,则可以检查$2以及$1。当然,如果你决定绕过你自己的钩子,你可以很容易地运行git push --no-verify来禁用你的钩子。

4

Git Hooks是你在找什么。您可以设置一个服务器端预先接收挂钩,该挂钩适用于试图推送到您的回购站的所有人,根据当前分支或类似的本地预推钩接受或拒绝推送。后者的例子可以参见herehere

相关问题