2012-03-11 13 views
23

मैं एक नंगे रेपो को अपडेट करना चाहता हूं, और इसे हुक का उपयोग करके कुछ करने के बाद कुछ किया है। मुझे किसका उपयोग करना चाहिए? गिट-एसएमएम किताब कहती है कि सभी रेफरी अपडेट होने के बाद वे दोनों आग लग गए हैं, इसलिए मुझे नहीं पता कि अंतर क्या है।पोस्ट-प्राप्त और पोस्ट-अपडेट के बीच क्या अंतर है?

उत्तर

16

documentation से:

के बाद प्राप्त होता है:

यह है कि यह उनके नाम के अलावा सभी refs के दोनों पुराने और नए मूल्यों हो जाता है में <post-update> हुक प्रतिस्थापित करता है।

बाद अद्यतन:

'के बाद अद्यतन' हुक बता सकते हैं कर रहे हैं सिर कि धकेल दिया गया है, लेकिन यह क्या उनके मूल और अद्यतन मान होते हैं, पता नहीं है क्या इसलिए यह एक है पुरानी जगह लॉग करने के लिए पुरानी जगह .. नया। <post-receive> हुक रेफरी के मूल और अद्यतन मूल्य दोनों प्राप्त करता है। यदि आपको उनकी आवश्यकता हो तो आप इसे इसके बजाय विचार कर सकते हैं।

+1

मैं बस एक स्क्रिप्ट लॉन्च करना चाहता हूं जो कि मेरे रेपो पर धक्का देने के बाद काम करने वाले पेड़ के आधार पर मेरे सर्वर (एफ़टीपी के माध्यम से) फ़ाइलों को अपडेट करेगा। तो, यह तीन जगह है: एक स्थानीय रेपो, एक और स्थानीय रेपो, और एक एफ़टीपी स्थान (गैर-गिट)।जब मैं एक रेपो को दबाता हूं, तो मैं इस तरह की एक स्क्रिप्ट लॉन्च करने का सबसे अच्छा समय कब होगा (मैं एफ़टीपी पर कौन सी फाइलों को समझने के लिए 'गिट diff' का उपयोग करूँगा)? – trusktr

+3

पोस्ट-प्राप्त पोस्ट-अपडेट की कार्यक्षमता का एक सुपर-सेट है, और सिर के धक्का देने के बाद यह है कि मुझे लगता है कि पोस्ट-प्राप्त पर्याप्त होना चाहिए। –

+1

मैं वेन लू से सहमत हूं - हम कुछ ऐसा करते हैं और 'पोस्ट-प्राप्त' – Nic

5

Git के लिए एक recent commit 2.2+ (नवंबर 2014), Junio C Hamano (gitster) से उल्लेख करते हैं:

pre-receive और post-receive हुक पुरानी शैली में सुधार होने की update और post-update हुक, जो ले डिजाइन किए गए थे उनकी कमांड लाइन पर अद्यतन जानकारी और कमांड लाइन लंबाई सीमा द्वारा सीमित हैं।

इसी जानकारी को मानक सीमा से खिलाया जाता है ताकि इस सीमा को उठाने के बजाय हुक को पूर्व/पोस्ट-हुक प्राप्त किया जा सके।

इन नए स्टाइल हुकों के लिए मानक इनपुट स्ट्रीम से पूरी तरह अद्यतन जानकारी का उपभोग करना अनिवार्य है। अन्यथा, वे SIGPIPE के माध्यम से प्राप्त-पैक प्रक्रिया को मारने का जोखिम उठाएंगे।

अब यह कहते हैं: एक हुक सभी जानकारी को देखने के लिए नहीं चाहता है

है, यह /dev/null करने के लिए अपने मानक इनपुट भेजने के लिए आसान है (शायद हुक के एक आला उपयोग पता करने के लिए आवश्यकता हो सकती है केवल एक तथ्य यह है कि एक पुश बनाया गया था, यह जानने के बिना कि कौन सी ऑब्जेक्ट्स को रीफ्रेश करने के लिए धक्का दिया गया है), और यह पहले से मौजूद मौजूदा हुक द्वारा किया जा चुका है।

हालांकि, क्योंकि लगातार असफल असफल होने का कोई अच्छा तरीका नहीं है जो इनपुट को पूरी तरह से उपभोग नहीं करता है (एक छोटे धक्का के परिणामस्वरूप एक छोटा अपडेट रिकॉर्ड हो सकता है जो पाइप बफर के भीतर फिट हो सकता है, जिस पर receive-pack प्रक्रिया का प्रबंधन हो सकता है हुक के पास लिखने से पहले बाहर निकलने का मौका है, जिसके परिणामस्वरूप receive-pack की मौत-दर-सिगिपिप नहीं होगी), इससे "ब्लू चाँद में एक बार" प्रेत विफलता का निदान करने में कठिनाई हो सकती है।

इस "हुक को अपने इनपुट को पूरी तरह से उपभोग करना चाहिए" जनादेश लिफ्ट करें।

+0

हम्म। केवल स्पष्ट करने हेतु। 'इसे उठाओ "हुक को अपने इनपुट को पूरी तरह से" जनादेश "का उपभोग करना चाहिए। - क्या इसका मतलब यह है कि यह वास्तव में क्या पढ़ता है: इसे * हटाया नहीं गया है, लेकिन सांता की इच्छा है, जो प्रतिबद्ध संदेश में अजीब तरह से गलत है? या यह वास्तव में "लिफ्ट * एड *" है, तो हम आखिरकार जश्न मना सकते हैं? :) धन्यवाद! –

+0

@ एसजे। यह उठाया गया है। ऐसा इसलिए है क्योंकि "एक जनादेश जिसे सख्ती से लागू नहीं किया गया है, हमें हुक में गलतियों को पकड़ने में मदद नहीं कर रहा है" उस उठाए गए जनादेश के परिणामस्वरूप: "यदि किसी हुक के पास जानकारी पढ़ने के बिना अपने ऑपरेशन के नतीजे का निर्णय लेने का एक अच्छा कारण है हम इसे खिलाते हैं, इसे ऐसा करने दें क्योंकि यह प्रसन्न होता है। " – VonC

+0

ठीक है, धन्यवाद। समस्या शब्द के साथ थी, संदेश में इस्तेमाल किया गया गलत तनाव, जिसने इसे संदिग्ध बना दिया। और गिट ने मुझे कभी भी चेहरे के मूल्य पर शब्दों के अपने अस्पष्ट विकल्पों पर भरोसा नहीं किया है। और अब मैं आपका उत्तर +1 कर सकता हूं, जिसे मैं आपकी टिप्पणी के साथ पूरा कर सकता हूं। –

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