2011-05-12 46 views
15

我有一個帖子收到,試圖確定進入推的分支名稱如下遠程回購鉤設置:無法從檢測的Git分支後收到鉤

$branch = `git rev-parse --abbrev-ref HEAD` 

我然而,我發現,無論我從$ branch變量推送的分支是否設置爲'master',都是如此。

任何想法?

回答

24

post-receive鉤子獲取與預接收相同的數據,而不是參數,但是來自stdin。

OLDREV(空間)NEWREV(空間)refName(換行)

你可以用這個bash腳本解析出裁判的名字:

while read oldrev newrev ref 
do 
    echo "$ref" 
done 
+0

完美,這正是我需要的。謝謝! – jsleeuw 2011-05-13 07:31:26

+2

除了要小心'post-receive'是否收到'git push --tags'(例如可能是'git push origin my_tagname'),那麼''ref'你會得到'refs/tags/my_tagname', * not *'refs/branch/my_branchname' – iainH 2015-07-12 15:09:47

1

您需要讀取傳遞給腳本的參數。這應該有分支名稱和新的和舊的修訂版本,併爲每個分支推送運行

2

Magnus的所有裁判發出以下我的解決方案沒有工作,但this做的:

#!/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" 
+1

那是因爲你正在尋找master這個詞,但是你收到的是refs/head/master。使用read將字符串轉換爲由'/'分隔的數組。然後你挖出價值。 – 2012-09-12 13:35:14

+0

嗨你可以幫助如何添加'和'條件在'if'像'if'「master」==「$ branch」&&「development」==「$ branch」]''。如果在鉤子中如何使用和調節。提前謝謝。 – Foolish 2015-06-23 17:48:06

2

這兩個答案都是正確的,但我遇到了麻煩標準輸入到下一個共同的功能後收到,鄂麥湖以下是我結束了:

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 
10

你也可以做這樣的事情使用bash變量替換:

read oldrev newrev ref 

branchname=${ref#refs/heads/} 

git checkout ${branchname} 
+0

完美,然後結合@ ralphtheninja的循環讀取多個分支被推送時的所有內容 – 2014-11-19 23:42:08