亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

編寫git post-receive鉤子以處理特定分支

編寫git post-receive鉤子以處理特定分支

Git
皈依舞 2019-10-05 14:34:03
這是我當前存放在公司服務器中的裸存儲庫中的git push origin master 鉤子: 該鉤子將推到Assembla。我需要的是,當有人將更改推送到我們服務器上的該分支時,僅推送一個分支(理想情況下為master),而忽略推送到其他分支。是否可以從裸倉庫中選擇分支,然后僅將該分支推送到Assembla?
查看完整描述

3 回答

?
jeck貓

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


查看完整回答
反對 回復 2019-10-05
?
楊__羊羊

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,它仍然可以工作。


查看完整回答
反對 回復 2019-10-05
?
慕沐林林

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"


查看完整回答
反對 回復 2019-10-05
  • 3 回答
  • 0 關注
  • 1265 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號