सभी वर्तमान और भविष्य के रिपॉजिट के लिए एक git पोस्ट-कमिट हुक लागू करना


275

मैंने एक Git पोस्ट-कमिट हुक लिखा है और यह सही तरीके से काम करता है। हालाँकि, मैं इस हुक को सभी वर्तमान (और भविष्य) git रिपॉजिटरी पर लागू करना चाहता हूं जिसे मैं काम कर रहा हूं। मैंने ~/.git/hooks/प्रोजेक्ट डायरेक्टरी में हुक डायरेक्टरी के बजाय हुक जोड़ने की कोशिश की , हालांकि, यह काम नहीं करता था।

क्या वैश्विक गिट हुक बनाने का कोई तरीका है जो मेरे सिस्टम पर सभी रिपॉजिटरी पर लागू होगा (उन्हें प्रत्येक कंप्यूटर डायरेक्टरी में कॉपी किए बिना)? यदि नहीं, तो आगे बढ़ने वाला सबसे अच्छा समाधान क्या होगा - शायद एक git-init टेम्पलेट?


3
Git 2.9 के रूप में इस के लिए यह सबसे अच्छा तरीका बदल गया है: VonC का जवाब एक बेहतर शर्त है। stackoverflow.com/a/37293198/2741954
साइमन ब्रहान

क्या इससे आपके सवाल का जवाब मिलता है? डिफ़ॉल्ट गिट हुक बदलें
ओलिवर SIVeke

जवाबों:


192

मैं इस हुक को सभी वर्तमान (और भविष्य) git रिपॉजिटरी पर लागू करना चाहता हूं जिसे मैं काम कर रहा हूं

Git 2.9+ (जून 2016) के साथ, आप बस इतना ही करेंगे:

git config --global core.hooksPath /path/to/my/centralized/hooks

" डिफ़ॉल्ट डिफ़ॉल्ट हुक बदलें " देखें : यह केंद्रीकृत हुक को प्रबंधित करने के लिए किया गया है।


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

@ रिक्लेविस क्या आपका मतलब है stackoverflow.com/a/40550555/6309 पूरी तरह से स्पष्ट नहीं था?
VonC

@Richlewis आपको सभी स्थानीय लोगों द्वारा साझा किए गए एक साझा फ़ोल्डर को उनके स्थानीय कॉन्फ़िगरेशन में संदर्भित करने के लिए सेटअप करने की आवश्यकता होगी।
VonC

दुर्भाग्य से मैं अभी भी यह नहीं मिलता है। रेपो के भीतर /.git/hooks/pre_commitक्या मैं इसे इंगित कर सकता हूं?
रिक्लेविस

@Richlewis मैंने आपके मूल प्रश्न का उत्तर दिया है।
VonC

290

Git 1.7.1 के अनुसार, आप git को बताने के लिए अपने gitconfig में init.templatedir सेट कर सकते हैं कि टेम्प्लेट को कहाँ देखना है।

इसे इस तरह सेट करें:

git config --global init.templatedir '~/.git_template'

बाद में, आपके द्वारा बनाई या क्लोन करने वाली नई रिपॉजिटरी इस निर्देशिका का उपयोग टेम्पलेट्स के लिए करेगी। अपने मनचाहे हुक लगाएं ~/.git_template/hooks। मौजूदा रिपॉजिटरी को git initएक ही डायरेक्टरी में चलाकर उचित टेम्प्लेट के साथ पुनर्निमित किया जा सकता .gitहै।

1.7.1 वर्ष से अधिक पुराने संस्करणों के लिए, git init --template ~/.git_templateयदि आप मेरी तरह हैं और तब भी काम करना चाहते हैं .git_template, तो अपनी डॉट फाइलों के बाकी हिस्सों के साथ-साथ अपने डायर का प्रबंधन करना चाहते हैं । आप $GIT_TEMPLATE_DIRपर्यावरण का उपयोग यह बताने के लिए भी कर सकते हैं git initकि आपकी टेम्प्लेट डायरेक्टरी कहां है।


51
बहुत बढ़िया जवाब। यदि किसी अन्य व्यक्ति को आश्चर्य होता है कि git initकिसी मौजूदा रेपो पर फिर से चल रहा है, तो उसे मिटा देता है - यह नहीं देखता है: stackoverflow.com/questions/5149694/…
kontur

मेरे लिए यह मौजूदा रिपॉजिटरी पर git init का उपयोग करके फ़ाइलों की प्रतिलिपि बनाने के लिए git टेम्पलेट फ़ोल्डर के सापेक्ष पथ के साथ काम नहीं किया। मैंने इसके बजाय पूर्ण पथ का उपयोग किया था।
user847988

1
उद्धरण के बिना खिड़कियों पर: `git config --global init.templatedir d: \ git \ .git_template \`
व्लादिमीर Vukanac

1
टिप: टेम्पलेट हुक कॉपी किए गए हैं। यदि आप वैश्विक हुक को एक साथ अपडेट करने में सक्षम होना चाहते हैं, तो हुक को कहीं और रखें और टेम्पलेट निर्देशिका (लिनक्स पर) में एक प्रतीकात्मक लिंक जोड़ें। सुनिश्चित करें कि लिंक पथ निरपेक्ष है।
टिम अल्क्लेयर

1
git initवास्तव में मेरे लिए हुक चलाना अद्यतन नहीं था। ऐसा लगता है कि यह उन फ़ाइलों को अधिलेखित नहीं करेगा जो पहले से ही हैं। stackoverflow.com/questions/10791486/ । इसके बजाय आपको पहले पुरानी हुक फ़ाइलों को हटाने की आवश्यकता है।
फिल आर

69

यदि आप उन्हें अपने सिस्टम पर हर जगह चाहते हैं (आपके अलावा उपयोगकर्ताओं सहित), तो आप इंस्टॉल किए गए टेम्प्लेट निर्देशिका की सामग्री को संशोधित कर सकते हैं - वे हैं $PREFIX/share/git-core/templates/hooks, जहां $PREFIXसंभवतः है /usr/localया /usr

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


11
धन्यवाद, यह अच्छी तरह से काम किया। और इसे अपने मौजूदा प्रोजेक्ट्स पर लागू करने के लिए, मैं बस git initफिर से दौड़ा और इसने मेरे नए हुक को जोड़ा।
स्वानसन

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

2
ओएस एक्स पर सोर्सट्री के एम्बेडेड गिट के लिए, वे में हैं/Applications/SourceTree.app/Contents/Resources/git_local/share/git-core/templates/hooks
CupawnTae

1
विंडोज के लिए यह git इंस्टॉल डायरेक्टरी के तहत mingw64\share\templates\hooks(या 32-बिट के लिए mingw32) में पाया जाता है
nerdherd

1
@nerdherd अब यह है mingw64\share\git-core\templates\hooks(gfw 2.25)
RJFalconer

7

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


1
यह एक वास्तविक समाधान होने से बहुत दूर है, इसलिए मुझे खेद करना पड़ा।
विक्टर श्रोडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.