2013-10-30 17 views
5

Bir PHP "uygulaması" dağıtmak için Git'te bir alım-alma kancası kullanıyoruz. Komut dosyası (Bash) şube adını kontrol eder ve şube adındaki bir önek temelinde doğru sunucuda bir rsync yapar.Git: Bir şubeyi silerken posta alma çengelini arama yok

Bu çalışma bir şey dışında oldukça iyi: Bir dalı sildiğimizde dağıtım yapmaya çalışır.

Birçok yerde işaretliyim ve eğer işlem bir silme ise, komut dosyasından çıkmanın bir yolunu bulamadım.

Bunu başarmanın bir yolu var mı? Komut, (Gitolite tarafından yönetilen) çıplak bir depoda, geliştiriciler iş istasyonunda değil.

cevap

14

git bir itme aldığında, post-receive kanca çok gibi <old-sha> <new-sha> <ref-name> satırları, çağrılan ve teslim edildi her ref ilgili Standart girdi verileri geçirilir:

bir dal silinir
e1f5c274e296f1c5148161f9d4e5eb43a6743e54 1eea3f51cf926c3710f8fa4a06f503041c4597f0 refs/heads/master 

, <new-sha> giriş şöyle, tamamen sıfır olması: Yani

6b239c481453c7fc2513b02e8aa0cd9c1ffa25cb 0000000000000000000000000000000000000000 refs/heads/foo 

, şöyle mantığı kullanarak bu algılamak için post-receive kanca ayarlamak (ve bir dağıtım tetiklemesini bu şube önlemek) olabilir:

#!/bin/sh - 

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

Tek bir itme işleminin birden çok şubeyi de içerebileceğini unutmayın! Muhtemelen dağıtılacak bir dizi kümeyi biriktirmek, uygun önekle başlamak ve sıfır olmayan bir NEWSHA olmalıdır.

+0

Bu eksik kısım oldu, çok teşekkürler! –