2010-09-13 11 views
58

रिमोट के रूप में एक आधिकारिक भंडार के साथ, और उससे जुड़े स्थानीय स्थानीय भंडार, क्या एक पूर्व-प्रतिबद्ध हुक उस मुख्य भंडार पर लिखे जा सकते हैं और इसके सभी क्लोनों पर लागू किया जा सकता है?गिट रिमोट/साझा प्री-प्रतिबद्ध हुक

+4

यदि आप * प्रवर्तन * चाहते हैं, तो केंद्रीय रिपो में एक अद्यतन हुक का उपयोग करें। यदि हुक प्रति प्रतिबद्ध सत्यापन कर रहा है, तो आप अभी भी प्री-प्रतिबद्ध हुक प्रदान कर सकते हैं; डेवलपर्स इसे स्वेच्छा से अपनाने की संभावना रखते हैं, ताकि जब तक वे धक्का देने की कोशिश न करें, तब तक वे कुछ गलत करने के बजाय तुरंत पता लगा सकते हैं। – Cascabel

+1

संभावित डुप्लीकेट: (http://stackoverflow.com/questions/3462955/) और (http://stackoverflow.com/questions/427207/) – blong

उत्तर

46

मुझे ऐसा नहीं लगता है, क्योंकि हुक क्लोन नहीं किए जाते हैं।
हो सकता है कि वह हुक स्क्रिप्ट स्वयं ही संस्करणित हो, और फिर क्लोन सर्वर में (प्रतीकात्मक लिंक) से लिंक करें (उनके ओएस समर्थन लिंक लिंक प्रदान करता है)।

या हो सकता है कि हुक क्लोन बनाने के लिए उपयोग किए गए git template directory का हिस्सा हैं (जो केवल क्लोन रेपो में उनकी उपस्थिति सुनिश्चित करेगा, जो गारंटी नहीं देंगे कि वे वास्तव में उपयोग और निष्पादित होते हैं)।

लेकिन मुझे नहीं लगता कि प्रतिबद्धता को लागू करने के लिए कोई "केंद्रीय" तरीका है।


Jefromi टिप्पणियां (जोर मेरा) में और भी अधिक स्पष्ट रूप से बताते हैं:

मैं यह वास्तव में लागू की हुक रेपो के साथ वितरित की है, एक Git भंडार के विचार के खिलाफ जाता है लगता है।
मेरा क्लोन मेरा भंडार है। मुझे इस पर गिट का उपयोग करने में सक्षम होना चाहिए, हालांकि मुझे पसंद है कि हुक चलाने के लिए या नहीं चुनना शामिल है।
(और एक सुरक्षा के दृष्टिकोण से, जो वास्तव में एक तरह से डरावना होगा -। कोई मुझे जब भी मैं कुछ Git आदेशों को चलाने के कुछ आलेख निष्पादित करने के लिए मजबूर करने की क्षमता होनी चाहिए)

मुझे लगता है कि टिप्पणी से सहमत , और केवल एक विशेष विशेष रेपो में, स्थानीय रूप से लागू नियमों को लागू करने के तरीकों को देखा है।
उदाहरण के लिए, आप केंद्रीय रेपो को सीधे नहीं दबाएंगे, लेकिन पहले क्यूए रेपो को धक्का देंगे जो केवल कुछ नियमों का पालन करने पर ही आपकी प्रतिबद्धता स्वीकार करेगा। यदि ऐसा होता है, तो क्यूए रेपो आपकी प्रतिबद्धता को केंद्रीय रेपो में धक्का देगी।

एक और उदाहरण सीधे क्या मैं सिर्फ होगा उल्लेख से प्राप्त "Serverless Continuous Integration with Git", एक तरह से स्थानीय स्तर पर निजी निर्माण है कि उन्हें कहीं भी धक्का से पहले काम करता है लागू करने के लिए।

+6

मुझे लगता है कि यह वास्तव में एक गिट भंडार के विचार के खिलाफ चला जाता है रेपो के साथ वितरित लागू हुक। मेरा क्लोन * मेरा * भंडार है। मुझे इस पर गिट का उपयोग करने में सक्षम होना चाहिए, हालांकि मुझे पसंद है कि हुक चलाने के लिए या नहीं चुनना शामिल है। (और एक सुरक्षा दृष्टिकोण से, यह वास्तव में डरावना होगा - जब भी मैं कुछ गिट कमांड चलाता हूं तो मुझे किसी भी स्क्रिप्ट को निष्पादित करने के लिए मजबूर करने की क्षमता नहीं होनी चाहिए।) – Cascabel

+1

@ जेफ्रोमी: आप जानते हैं कि क्या डरावना है? जब मैंने अपना संपादित उत्तर सबमिट करने से पहले टिप्पणी टाइप की, तो मैंने 'एड ...' टाइप करना शुरू किया, और मेरे कंप्यूटर पर फ़ायरफ़ॉक्स ने मुझे प्रस्ताव दिया: "जेफ्रोमी की टिप्पणी जोड़ें"। पहली बार मैं वहां नहीं रहा हूं, जाहिर है;) – VonC

+0

स्वयं को ध्यान दें: यह भी देखें http://stackoverflow.com/questions/3209208/what-is-the-cleverest-use-of-source-repository-that-you सिमलिंक प्रस्ताव के लिए-कभी-कभी देखा/320 9 767 # 320 9 767 – VonC

5

क्या एक पूर्व-प्रतिबद्ध हुक उस मुख्य भंडार पर लिखे जा सकते हैं और इसके सभी क्लोनों पर लागू किया जा सकता है?

githooks(5) से:

 
    pre-commit 
     This hook is invoked by git commit, and can be bypassed with 
     --no-verify option. 

के बाद से हुक आसानी से नजरअंदाज किया जा सकता है, ऐसा लगता है आपके सवाल का जवाब है "नहीं"।

इसके अलावा, चूंकि .git/hooks निर्देशिका को क्लोन नहीं किया गया है, इसलिए क्लाइंट को इसे धक्का देने के लिए एक तंत्र प्रतीत नहीं होता है।

8

आप पूर्व-प्रतिबद्ध हुक को स्थानीय स्थानीय भंडारों पर पर मजबूर नहीं कर सकते हैं, लेकिन आपके केंद्रीय रेपो में आप अभी भी एक प्री-प्राप्त हुक चला सकते हैं।

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

 
#!/bin/sh 
while read rev_old rev_new ref 
do 
    MALFORMED="$(git rev-list --oneline $rev_old..$rev_new | egrep -v '#[0-9]+' | awk '{print $1}')" 
    if [ x"$MALFORMED" != x ] 
    then 
     echo Invallid commit message on $MALFORMED 
     exit 1 
    fi 
done 

अधिक जानकारी के लिए

देख f.ex https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks

2

मान लें कि आप अपना Git रेपो निर्माण प्रणाली के साथ जुड़े है कि में स्रोत कोड है, तो आप स्थापित करने के लिए निर्माण सिस्टम को कॉन्फ़िगर कर सकता है पूर्व के लिए प्रतिबद्ध हुक, यानी पूर्व-प्रतिबद्ध हुक को स्थानांतरित या लिंक करके ~ संस्करणित किया गया है।

मैंने अभी तक यह कोशिश नहीं की है। मैं एक बेहतर समाधान के लिए googling जबकि यहाँ आया था।

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