これが、会社のサーバーにあるベアリポジトリの現在のフックです
git push origin master
。このフックはAssemblaにプッシュします。私が必要としているのは、誰かがサーバー上のそのブランチに変更をプッシュしたときに1つのブランチ(マスター、理想的には)のみをプッシュし、他のブランチへのプッシュを無視することです。ベアリポジトリからブランチを選択し、そのブランチのみをAssemblaにプッシュすることは可能ですか?
7 に答える
post-receive フックは、stdin から次の形式で引数を取得します。
<oldrev> <newrev> <refname>
これらの引数は、コマンド ライン引数ではなく標準入力から取得されるため、read
代わりにを使用する必要があります$1 $2 $3
。
post-receive フックは、一度に複数のブランチを受け取ることができるため (たとえば、誰かが を実行した場合)、 をループで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
post-receive フックが stdin で取得する最後のパラメーターは、変更された ref であるため、それを使用して、その値が「refs/heads/master」であるかどうかを確認できます。post-receive フックで使用するものに似たルビーのビット:
STDIN.each do |line|
(old_rev, new_rev, ref_name) = line.split
if ref_name =~ /master/
# do your push
end
end
プッシュされた ref ごとに行が取得されることに注意してください。そのため、master 以外をプッシュしても機能します。
ステファンの答えは私にはうまくいきませんでしたが、これはうまくいきました:
#!/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"
この機能を実行するための PHP スクリプトを自分で作成しました。
https://github.com/fotuzlab/githubdump-php
サーバーでこのファイルをホストし、できればレポ ルートをホストし、github Webhook で URL を定義します。8 行目の「allcommits」をブランチ名に変更し、18 行目にコード/関数を追加します。
例えば
function githubdump($payload_object) {
// Write your code here.
exec('git push origin master');
}