2013-10-30 11 views
5

हटाते समय पोस्ट-प्राप्त हुक को कॉल न करें हम एक PHP "ऐप" को तैनात करने के लिए गिट में पोस्ट-प्राप्त हुक का उपयोग कर रहे हैं। स्क्रिप्ट (बैश) शाखा के नाम की जांच करता है और शाखा नाम में उपसर्ग के आधार पर सही सर्वर पर rsync करता है।गिट: शाखा

यह काम एक चीज़ को छोड़कर बहुत अच्छी तरह से काम करता है: जब हम शाखा हटाते हैं तो यह तैनाती करने की कोशिश करता है।

मैंने कई स्थानों पर जांच की, और यदि ऑपरेशन एक डिलीट है तो मुझे स्क्रिप्ट से पता लगाने का कोई तरीका नहीं मिला।

क्या यह हासिल करने का कोई तरीका है। लिपि एक नंगे भंडार पर है (गिटोलाइट द्वारा प्रबंधित), यह डेवलपर्स वर्कस्टेशन पर नहीं है।

उत्तर

14

जब Git एक धक्का प्राप्त करता है, post-receive हुक शुरू हो जाती है और प्रत्येक रेफरी कि दिया गया था के बारे में stdin पर डेटा पारित कर दिया, <old-sha> <new-sha> <ref-name> की पंक्तियों में है, इसलिए जैसे:

e1f5c274e296f1c5148161f9d4e5eb43a6743e54 1eea3f51cf926c3710f8fa4a06f503041c4597f0 refs/heads/master 

जब एक शाखा हटा दी जाती है, <new-sha>

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 

याद रखें कि एक ही धक्का में कई शाखाएं भी शामिल हो सकती हैं! आप शायद शाखाओं के एक समूह को जमा करना चाहते हैं जिन्हें तैनात किया जाना चाहिए, जो उपयुक्त उपसर्ग के साथ शुरू होता है और एक nonzero NEWSHA है।

+0

वह गायब हिस्सा था, बहुत धन्यवाद! –

संबंधित मुद्दे