2013-10-30 9 views
5

私たちはGitでポスト受信フックを使ってPHP "app"をデプロイしています。スクリプト(Bash)はブランチ名をチェックし、ブランチ名のプレフィックスに基づいて正しいサーバー上でrsyncを実行します。Git:ブランチを削除するときにポスト受信フックしないでください

1つのことを除いて、この作業はかなりうまくいきます:ブランチを削除すると、デプロイメントが試行されます。

私は多くの場所を調べましたが、操作が削除であるかどうかをスクリプトから調べる方法は見つかりませんでした。

これを達成する方法はありますか?このスクリプトは(Gitoliteによって管理されている)裸のリポジトリにあり、開発者のワークステーションにはありません。

答えて

14

Gitはプッシュを受信すると、post-receiveフックが呼び出され、そのように、<old-sha> <new-sha> <ref-name>の行で、配信された各参照についての標準入力にデータを渡されます。ブランチが削除されると

e1f5c274e296f1c5148161f9d4e5eb43a6743e54 1eea3f51cf926c3710f8fa4a06f503041c4597f0 refs/heads/master 

<new-sha>エントリがすべてゼロであるので、同じよう:

0:だから

6b239c481453c7fc2513b02e8aa0cd9c1ffa25cb 0000000000000000000000000000000000000000 refs/heads/foo 

、あなたは次のようにロジックを使用してこれを検出(と展開をトリガーからこのブランチを防ぐ)ためにあなたのpost-receiveフックを調整することができます

#!/bin/sh - 

while read OLDSHA NEWSHA REF ; do 
    if [ "$NEWSHA" = "0000000000000000000000000000000000000000" ]; then 
    # This ref has been deleted! Respond appropriately. 
    fi 
done 

1回のプッシュで複数のブランチを更新できることを覚えておいてください。適切な接頭辞で始まり、0以外のNEWSHAを持つ配備すべきブランチのセットを蓄積したいと思うでしょう。

+0

これは欠けていた部分でした。多くの感謝! –

関連する問題