我有两个遥控器,一个用于生产,一个用于GitHub。由于我必须将某些文件推送到不能登陆GitHub的作品,因此我想限制一个分支以避免发生意外。限制推送某个分支的某些遥控器
有没有办法告诉我的混帐客户端,它应该从未分支“部署”推到远程“github上”,只有推动这个分支“生产”?
我有两个遥控器,一个用于生产,一个用于GitHub。由于我必须将某些文件推送到不能登陆GitHub的作品,因此我想限制一个分支以避免发生意外。限制推送某个分支的某些遥控器
有没有办法告诉我的混帐客户端,它应该从未分支“部署”推到远程“github上”,只有推动这个分支“生产”?
kowsky's answer是正确的,只要你的Git至少是1.8.2(如果不是你应该升级:-))。但是,链接的例子是错误的。
的pre-push hook被调用,有两个参数,其中规定:
什么是要推,这是你在你运行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
来禁用你的钩子。