[英]Git post-receive hook to checkout each branch to different folders?
[英]Not able to detect branch from Git post-receive hook
我在远程仓库上有一个post post hook挂钩设置,试图确定传入推送的分支名称,如下所示:
$branch = `git rev-parse --abbrev-ref HEAD`
但是,我发现,无论我从我的$ branch变量推送什么分支都设置为'master'。
有任何想法吗?
post-receive挂钩获取与pre-receive相同的数据,而不是参数,而是来自stdin。 所有参考均发送以下内容:
oldRev(space)newRev(space)refName(换行)
您可以使用此bash脚本解析引用名称:
while read oldrev newrev ref
do
echo "$ref"
done
你也可以使用bash变量替换来做这样的事情:
read oldrev newrev ref
branchname=${ref#refs/heads/}
git checkout ${branchname}
Magnus的解决方案对我没有用,但是这样做了:
#!/bin/bash
echo "determining branch"
if ! [ -t 0 ]; then
read -a ref
fi
IFS='/' read -ra REF <<< "${ref[2]}"
branch="${REF[2]}"
if [ "master" == "$branch" ]; then
echo 'master was pushed'
fi
if [ "staging" == "$branch" ]; then
echo 'staging was pushed'
fi
echo "done"
这两个答案都是正确的,但我无法将stdin用于收到邮件后的下一个常用功能。 这是我最终得到的:
read oldrev newrev ref
echo "$oldrev" "$newrev" "$ref" | . /usr/share/git-core/contrib/hooks/post-receive-email
if [ "refs/heads/qa" == "$ref" ]; then
# Big Tuna YO!
wget -q -O - --connect-timeout=2 http://127.0.0.1:3000/hooks/build/qa_now
fi
您需要读取传递给脚本的参数。 这应该有分支名称和新旧版本,并为每个分支推送运行
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.