अद्यतन हुक
आप हुक के बारे में पता का उपयोग करना - कृपया, उनके बारे में documentation पढ़ें! जो हुक आप शायद चाहते हैं वह अद्यतन है, जो एक बार प्रति रेफरी चलाया जाता है। (प्री-प्राप्त हुक पूरे धक्का के लिए एक बार चलाया जाता है) एसओ पर पहले से ही इन हुकों के बारे में बहुत सारे प्रश्न और उत्तर हैं; आप जो करना चाहते हैं उसके आधार पर, शायद आपको हुक लिखने के बारे में मार्गदर्शन मिल सकता है यदि आपको इसकी आवश्यकता है।
बल देने के लिए कि यह वास्तव में संभव, डॉक्स से एक उद्धरण है:
यह हुक सुनिश्चित करें कि ऑब्जेक्ट नाम एक वस्तु के लिए प्रतिबद्ध है कि है एक है बनाने के द्वारा कुछ refs पर मजबूर अद्यतन को रोकने के लिए इस्तेमाल किया जा सकता पुराने ऑब्जेक्ट नाम द्वारा नामित प्रतिबद्ध वस्तु के वंशज। यही है, "केवल फास्ट फॉरवर्ड" नीति को लागू करने के लिए।
इसका उपयोग पुराने .. नई स्थिति को लॉग करने के लिए भी किया जा सकता है।
और बारीकियों:
हुक प्रत्येक रेफरी अद्यतन किया जा करने के लिए एक बार कार्यान्वित करता है, और तीन पैरामीटर लेता है:
- रेफरी के नाम अपडेट किया जा रहा,
- पुराने ऑब्जेक्ट नाम को रेफरी में संग्रहीत किया गया है,
- और नया ऑब्जेक्टनाम रेफरी में संग्रहीत किया जाना है।
तो, उदाहरण के लिए, आप यह सुनिश्चित करें कि प्रतिबद्ध विषयों में से कोई भी 80 वर्ण से अधिक कर रहे हैं करना चाहते हैं, एक बहुत ही मौलिक कार्यान्वयन होगा:
#!/bin/bash
long_subject=$(git log --pretty=%s $2..$3 | egrep -m 1 '.{81}')
if [ -n "$long_subject" ]; then
echo "error: commit subject over 80 characters:"
echo " $long_subject"
exit 1
fi
बेशक
, कि एक है खिलौना उदाहरण; सामान्य स्थिति में, आप पूर्ण प्रतिबद्ध संदेश वाले लॉग आउटपुट का उपयोग करेंगे, प्रति प्रतिबद्धता को विभाजित करेंगे, और प्रत्येक सत्यापन प्रतिबद्ध संदेश पर अपना सत्यापन कोड कॉल करेंगे।
क्यों आप अद्यतन हुक
यह चर्चा की गई/स्पष्ट टिप्पणी में चाहते हैं; यहां एक सारांश है।
अद्यतन हुक प्रति बार एक बार चलता है। एक रेफरी एक वस्तु के लिए एक सूचक है; इस मामले में, हम शाखाओं और टैगों के बारे में बात कर रहे हैं, और आम तौर पर सिर्फ शाखाएं (लोग टैग को अक्सर धक्का नहीं देते हैं, क्योंकि वे आम तौर पर केवल संस्करणों को चिह्नित करने के लिए होते हैं)।
अब, अगर एक उपयोगकर्ता दो शाखाओं, गुरु और प्रयोगात्मक के लिए अद्यतन धक्का है:
o - o - o (origin/master) - o - X - o - o (master)
\
o - o (origin/experimental) - o - o (experimental)
मान लीजिए कि एक्स "बुरा" के लिए प्रतिबद्ध है, यानी एक जो प्रतिबद्ध-msg हुक विफल हो जाएगा है। स्पष्ट रूप से हम मास्टर को धक्का स्वीकार नहीं करना चाहते हैं। तो, अद्यतन हुक उस को अस्वीकार करता है। लेकिन प्रयोगात्मक पर काम करने के साथ कुछ भी गलत नहीं है! अद्यतन हुक उसको स्वीकार करता है। इसलिए, मूल/मास्टर अपरिवर्तित रहता है, लेकिन मूल/प्रयोगात्मक अद्यतन हो जाता है:
o - o - o (origin/master) - o - X - o - o (master)
\
o - o - o - o (origin/experimental, experimental)
पूर्व प्राप्त चलाए जाने पर केवल एक बार, शुरुआत refs अद्यतन करने के लिए बस से पहले (पहली बार से पहले अद्यतन हुक चलाया जाता है) हुक। यदि आपने इसका इस्तेमाल किया है, तो आपको पूरे धक्का को असफल होने का कारण बनना होगा, इस प्रकार यह कहकर कि मास्टर पर एक बुरा प्रतिबद्ध संदेश था, आप किसी भी तरह से भरोसा नहीं करते कि प्रयोगात्मक पर काम अच्छा है, भले ही उनके संदेश ठीक हैं!
मुझे लगता है कि ओपी जो हुक ढूंढ रहा है वह पूर्व-प्राप्त है, क्योंकि वह प्रतिबद्ध संदेश के आधार पर पूरे धक्का को अस्वीकार करना चाहता है। हालांकि, AFAIK, न तो पूर्व-प्राप्त और न ही अद्यतन संदेश के रूप में इनपुट संदेश प्राप्त करते हैं। तो प्रतिबद्ध-संदेश का उपयोग शायद सबसे अच्छा समाधान होगा। –
@ कान: मुझे पूरा यकीन है कि ओपी अद्यतन चाहता है, पूर्व-प्राप्त नहीं। "पूरे धक्का" का मतलब सभी शाखाओं के लिए धक्का है। यदि उपयोगकर्ता तीन शाखाओं में अपडेट को धक्का देने का प्रयास करता है, और केवल एक में अमान्य प्रतिबद्ध संदेश होते हैं, तो अन्य दो को अभी भी स्वीकार किया जाना चाहिए! – Cascabel
@ कान: और नहीं, प्रतिबद्ध संदेश इनपुट का हिस्सा नहीं है, लेकिन पुराने और नए ऑब्जेक्ट (प्रतिबद्ध) नाम (SHA1s) हैं। ध्यान दें कि रीफ अपडेट होने से पहले अद्यतन हुक निष्पादित किया जाता है (प्रतिबद्ध वस्तुओं को प्राप्त करने के बाद)। हुक इसलिए गिट लॉग का उपयोग पुराने और नए के बीच जो कुछ भी करना चाहता है उसका निरीक्षण करने के लिए कर सकता है, जिसमें उनके प्रतिबद्ध संदेश भी शामिल हैं। – Cascabel