编写git post-receive钩子以处理特定分支

这是我当前存放在公司服务器中的裸存储库中的git push origin master 钩子: 该钩子将推到Assembla。我需要的是,当有人将更改推送到我们服务器上的该分支时,仅推送一个分支(理想情况下为master),而忽略推送到其他分支。是否可以从裸仓库中选择分支,然后仅将该分支推送到Assembla?



皈依舞
浏览 1226回答 3
3回答

jeck猫

接收后挂钩从stdin中以形式获取参数<oldrev> <newrev> <refname>。由于这些参数来自标准输入,而不是命令行参数,因此需要使用read代替$1 $2 $3。后收到钩可以接收多个分支一次(例如,如果有人做了git push --all),所以我们还需要包裹read在一个while循环。一个有效的代码段看起来像这样:#!/bin/bashwhile read oldrev newrev refnamedo&nbsp; &nbsp; branch=$(git rev-parse --symbolic --abbrev-ref $refname)&nbsp; &nbsp; if [ "master" = "$branch" ]; then&nbsp; &nbsp; &nbsp; &nbsp; # Do something&nbsp; &nbsp; fidone

杨__羊羊

接收后挂钩在stdin上获得的最后一个参数是ref的更改,因此我们可以使用它来检查该值是否为“ refs / heads / master”。红宝石有点类似于我在接收后挂钩中使用的红宝石:STDIN.each do |line|&nbsp; &nbsp; (old_rev, new_rev, ref_name) = line.split&nbsp; &nbsp; if ref_name =~ /master/&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# do your push&nbsp; &nbsp; endend请注意,对于推送的每个引用,它都会获得一行,因此,如果您推送的不仅仅是master,它仍然可以工作。

慕沐林林

斯特凡的答案并没有为我工作,但这样做的:#!/bin/bashecho "determining branch"if ! [ -t 0 ]; then&nbsp; read -a reffiIFS='/' read -ra REF <<< "${ref[2]}"branch="${REF[2]}"if [ "master" == "$branch" ]; then&nbsp; echo 'master was pushed'fiif [ "staging" == "$branch" ]; then&nbsp; echo 'staging was pushed'fiecho "done"
打开App,查看更多内容
随时随地看视频慕课网APP