2011-02-02 10 views
9

मैं गिट करने के लिए नया हूं और मैं मूल/मास्टर को धक्का देने के बाद प्रतिबद्ध संदेश कैप्चर करने में सक्षम होना चाहता हूं और बैश स्क्रिप्ट (सर्वर पर) चला सकता हूं स्ट्रिंग में क्या है।गिट प्रतिबद्ध संदेश कैप्चर करने और एक्शन चलाने के लिए

उदाहरण के लिए, मेरे Git संदेश के लिए प्रतिबद्ध है, तो कहते हैं: [email] my commit message

प्रतिबद्ध संदेश [email] तो कोई निर्दिष्ट कार्य करते हैं, तो अन्यथा, यह मत करो।

यहां नमूने बैश स्क्रिप्ट मैं post-receive हुक में उपयोग करने का सोच रहा हूँ है:

#!/bin/bash 

MESSAGE= #commit message variable? 

if [[ "$MESSAGE" == *[email]* ]]; then 
     echo "do action here" 
else 
     echo "do nothing" 
fi 

मूल रूप से सब मुझे पता है की जरूरत है क्या करने के लिए संदेश चर नाम है, ऊपर बैश में उपयोग करने के लिए स्क्रिप्ट? साथ ही, मुझे यकीन नहीं है कि यह करने के लिए यह सही हुक है या नहीं।

उत्तर

24

मुझे लगता है कि मैं अपने ही सवाल का जवाब पता लगा लिए एक git hook चाहते हैं; चर git-log आदेश का उपयोग कर प्राप्त किया जा सकता है:

git log -1 HEAD --pretty=format:%s 

हां, तो मेरी स्क्रिप्ट होगा:

#!/bin/bash 

MESSAGE=$(git log -1 HEAD --pretty=format:%s) 

if [[ "$MESSAGE" == *\[email\]* ]]; then 
     echo "do action here" 
else 
     echo "do nothing" 
fi 

मुझे आशा है कि यह मदद कर सकता है किसी और को जो जवाब के लिए खोज रहा है।

+0

तो यह '[ईमेल]' मार्कअप आपके प्रतिबद्ध संदेश का स्थायी रूप से हिस्सा बनने जा रहा है? – Cascabel

+0

अन्य संभावित विधियां: हुक को सिग्नल करने के लिए एक पर्यावरण चर का उपयोग करें, इसलिए इसके बारे में प्रतिबद्ध संदेश में कभी भी कुछ भी नहीं है। इसे आसान बनाने के लिए उपनाम का प्रयोग करें। या, यदि आप इसे संदेश में लिखना चाहते हैं, तो पूर्व-प्रतिबद्ध हुक में मार्कअप का पता लगाएं ताकि आप प्रतिबद्ध होने से पहले संदेश को संशोधित कर सकें। (या तो मान लें कि प्रतिबद्धता सफल होगी और तुरंत ईमेल करेगी, या पोस्ट-प्रतिबद्ध हुक के लिए कुछ स्टोर करें ...) – Cascabel

+0

या क्या आप वाकई पोस्ट पोस्ट प्राप्त कर रहे हैं, पोस्ट पोस्ट नहीं? फिर आप निश्चित रूप से प्रतिबद्ध संदेश को संशोधित नहीं कर सकते हैं। हालांकि, इसका मतलब है कि आपका समाधान काम नहीं करता है: एक धक्का सिर्फ एक प्रतिबद्धता को धक्का नहीं देता है, यह किसी भी संख्या में रेफरी अपडेट करता है, जिनमें से प्रत्येक में कई नए काम शामिल हो सकते हैं। आपको वास्तव में [उदाहरण] (http://git.kernel.org/?p=git/git.git;a=blob;f=contrib/hooks/post-receive-email;hb=HEAD) देखना चाहिए गिट का contrib। यह काफी हद तक संभालता है, और आप इसे केवल [ईमेल] 'कहने वाले कार्यों पर ध्यान देने के लिए संशोधित कर सकते हैं। – Cascabel

1

आप शायद कि

+0

मैं पहले ही पोस्ट-प्राप्त हुक का उपयोग कर रहा हूं; मैं अपनी बैश स्क्रिप्ट में कौन सा चर उपयोग करता हूं, या बेहतर अभी तक, क्या आप मुझे एक संदर्भ या उदाहरण के लिए इंगित कर सकते हैं जो मुझे बता सकता है कि इसका उपयोग किस प्रकार किया जाए ताकि मैं इसे पार्स कर सकूं? –

+2

आपकी सुविधा के लिए, मैं लिंक पाब्लो से पाठ पोस्ट करूंगा, आपको यहां भेजा गया: "पूरी प्रतिबद्ध प्रक्रिया पूरी होने के बाद, पोस्ट-प्रतिबद्ध हुक चलता है। इसमें कोई पैरामीटर नहीं होता है, लेकिन आप आसानी से अंतिम प्राप्त कर सकते हैं गिट लॉग -1 हेड चलाकर प्रतिबद्ध करें। आम तौर पर, इस स्क्रिप्ट को अधिसूचना या कुछ समान के लिए प्रयोग किया जाता है। " – Dustin

+0

वास्तव में उपयोगी होने के उत्तर के लिए, इसमें कम से कम पर्याप्त टिप्पणी होनी चाहिए ताकि उचित रूप से स्वयं खड़े हो जाएं। – tripleee

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