16

次のように、受信プッシュのブランチ名を決定しようとするリモートリポジトリにポスト受信フックのセットアップがあります。

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

しかし、私が見つけたのは、 $branch 変数からどのブランチをプッシュしても、「マスター」が設定されているということです。

何か案は?

4

5 に答える 5

25

post-receive フックは、pre-receive と同じデータを引数としてではなく stdin から取得します。以下は、すべての参照に対して送信されます。

oldRev (スペース) newRev (スペース) refName (改行)

次の bash スクリプトを使用して、ref 名を解析できます。

while read oldrev newrev ref
do
    echo "$ref"
done
于 2011-05-12T10:40:17.670 に答える
10

bash 変数置換を使用して、次のようなこともできます。

read oldrev newrev ref

branchname=${ref#refs/heads/}

git checkout ${branchname}
于 2012-11-02T16:07:32.387 に答える
2

マグナスの解決策は私にはうまくいきませんでしたが、これはうまくいきました:

#!/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"
于 2012-09-11T10:48:07.420 に答える
2

これらの答えは両方とも正しいのですが、次の共通関数 post-receive-email に 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
于 2012-10-19T18:20:56.507 に答える
1

スクリプトに渡される引数を読み取る必要があります。これには、ブランチ名と新旧のリビジョンがあり、プッシュされたブランチごとに実行される必要があります

于 2011-05-12T06:42:35.150 に答える