3 回答
TA贡献1909条经验 获得超7个赞
接收后挂钩从stdin中以形式获取参数<oldrev> <newrev> <refname>。由于这些参数来自标准输入,而不是命令行参数,因此需要使用read代替$1 $2 $3。
后收到钩可以接收多个分支一次(例如,如果有人做了git push --all),所以我们还需要包裹read在一个while循环。
一个有效的代码段看起来像这样:
#!/bin/bash
while read oldrev newrev refname
do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ "master" = "$branch" ]; then
# Do something
fi
done
TA贡献1943条经验 获得超7个赞
接收后挂钩在stdin上获得的最后一个参数是ref的更改,因此我们可以使用它来检查该值是否为“ refs / heads / master”。红宝石有点类似于我在接收后挂钩中使用的红宝石:
STDIN.each do |line|
(old_rev, new_rev, ref_name) = line.split
if ref_name =~ /master/
# do your push
end
end
请注意,对于推送的每个引用,它都会获得一行,因此,如果您推送的不仅仅是master,它仍然可以工作。
TA贡献2016条经验 获得超9个赞
斯特凡的答案并没有为我工作,但这样做的:
#!/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"
- 3 回答
- 0 关注
- 1225 浏览
添加回答
举报