Git 将推送限制到分支的某些远程位置
我有两个遥控器,一个用于生产,一个用于GitHub。由于我必须将某些文件推送到不能登陆GitHub的产品中,我想限制一个分支以避免发生意外 有没有办法告诉我的git客户端,它应该永远不要将分支“部署”推到远程“github”上,而只将该分支推到“生产”上。您可以设置一个服务器端预接收钩子,该钩子适用于尝试推送到您的回购的每个人,根据当前分支接受或拒绝推送,或者类似的本地预推钩子。后者的例子可以找到。就是你要找的。您可以设置一个服务器端预接收钩子,该钩子适用于尝试推送到您的回购的每个人,根据当前分支接受或拒绝推送,或者类似的本地预推钩子。后者的示例可以找到。是正确的,前提是您的Git至少为1.8.2(如果不是,则应升级:-))。然而,链接的示例是错误的 使用两个参数调用,这些参数提供:Git 将推送限制到分支的某些远程位置,git,branch,git-remote,Git,Branch,Git Remote,我有两个遥控器,一个用于生产,一个用于GitHub。由于我必须将某些文件推送到不能登陆GitHub的产品中,我想限制一个分支以避免发生意外 有没有办法告诉我的git客户端,它应该永远不要将分支“部署”推到远程“github”上,而只将该分支推到“生产”上。您可以设置一个服务器端预接收钩子,该钩子适用于尝试推送到您的回购的每个人,根据当前分支接受或拒绝推送,或者类似的本地预推钩子。后者的例子可以找到。就是你要找的。您可以设置一个服务器端预接收钩子,该钩子适用于尝试推送到您的回购的每个人,根据当前分
- 远程设备的名称,如果使用了命名的远程设备,则为URL
- URL(如果使用了命名远程,则扩展命名远程的结果)
git push
时指定的内容)在钩子的标准输入上提供给钩子。这就是两个链接示例都被破坏的地方
如果您运行:
git push github refspec1 refspec2 ... refspecN
git push github
然后,被推送的引用就是这个命令行上给出的引用
如果您运行:
git push github refspec1 refspec2 ... refspecN
git push github
(如果没有参照规范),要推送的分支集是。。。这很复杂,但在现代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 pushhttps://github.com/...
要绕过自己的钩子,可以选中$2
以及$1
。当然,如果您决心绕过自己的钩子,您可以轻松运行git push--no-verify
来禁用钩子。是正确的选择,前提是您的git至少为1.8.2(如果不是,您应该升级:-))。然而,链接的示例是错误的
使用两个参数调用,这些参数提供:
- 远程设备的名称,如果使用了命名的远程设备,则为URL
- URL(如果使用了命名远程,则扩展命名远程的结果)
git push
时指定的内容)在钩子的标准输入上提供给钩子。这就是两个链接示例都被破坏的地方
如果您运行:
git push github refspec1 refspec2 ... refspecN
git push github
然后,被推送的引用就是这个命令行上给出的引用
如果您运行:
git push github refspec1 refspec2 ... refspecN
git push github
(如果没有参照规范),要推送的分支集是。。。这很复杂,但在现代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 pushhttps://github.com/...
要绕过自己的钩子,可以选中$2
以及$1
。当然,如果您决定绕过自己的钩子,您可以轻松地运行gitpush--no-verify
来禁用钩子