2011-04-11 16 views
26

मैंने जीएचसी (ग्लास्गो हास्केल कंपाइलर) भंडार क्लोन किया। कंपाइलर बनाने के लिए, आपको कई पुस्तकालयों की आवश्यकता है, वे सभी गिट भंडार के रूप में भी उपलब्ध हैं। लोगों को जीने में आसानी लाने के लिए, जीएचसी हैकर्स में एक स्क्रिप्ट sync-all शामिल है, जब निष्पादित किया जाता है, तो सभी निर्भर भंडारों को अद्यतन करता है।गेट में एक कमांड या पुल कमांड के बाद सही आदेश कैसे निष्पादित करें?

अब मेरे प्रश्न पर: मैं स्वचालित रूप से git pull करने के बाद गिट निष्पादित कैसे कर सकता हूं? मैंने हुक का उपयोग करने के बारे में कुछ सुना, लेकिन मुझे वास्तव में पता नहीं है, मुझे क्या करना है।

+2

गिट हुक के लिए दस्तावेज़ की जांच करें: http://www.kernel.org/pub/software/scm/git/docs/githooks.html –

+0

http://stackoverflow.com/questions/4185400/is-here- किसी भी गिट-हुक-फॉर-पुल –

उत्तर

25

एक post-receive या post-update हुक आम तौर पर काम के इस प्रकार, प्रत्येक धक्का के बाद मार डाला के लिए प्रयोग किया जाता है।
बाद प्राप्त और बाद अद्यतन हुक बहस में है के बीच का अंतर: एक post-receive दोनों पुराने और उनके नाम के अलावा सभी refs के नए मूल्य मिलेगा।

गायब टुकड़ा है: जहां वह हुक खुद को निष्पादित करता है?

ब्लॉग पोस्ट "Missing git hooks documentation" से (एक महान) अतः योगदानकर्ता Mark Longair इस पर कुछ प्रकाश डालता है:

वर्तमान कार्यशील निर्देशिका Git निर्देशिका हो जाएगा।

  • तो, अगर यह एक नंगे भंडार "/src/git/test.git/" कहा जाता है, कि वर्तमान कार्यशील निर्देशिका हो जाएगा है - अगर यह एक गैर नंगे भंडार और काम पेड़ के शीर्ष स्तर "/home/mark/test/" है तो वर्तमान कार्यशील निर्देशिका हो जाएगा "/home/mark/test/.git/"
  • उसकी SO answer में

Chris Johnsen विवरण: "–-git-dir या GIT_DIR निर्दिष्ट कर रहे हैं लेकिन -–work-tree, GIT_WORK_TREE और core.worktree में से कोई भी निर्दिष्ट है, तो वर्तमान wor राजा निर्देशिका को आपके काम करने वाले पेड़ की शीर्ष निर्देशिका माना जाता है। "

दूसरे शब्दों में, अपने काम के पेड़ भी वर्तमान निर्देशिका (".git" निर्देशिका), जो लगभग निश्चित रूप से क्या आप चाहते नहीं है हो जाएगा।

के लिए अपने सही निर्देशिका में क्रियान्वित किया जा करने के लिए सुनिश्चित करें कि आपके hook/post-receive स्क्रिप्ट, एक बार बनाया है और निष्पादन योग्य बनाया है, सही रास्ते पर GIT_WORK_TREE सेट, बनाओ (अर्थात नहीं "xxx.git" एक)।

+8

पोस्ट-प्राप्त और पोस्ट-अपडेट हुक एक गिट पुश के बाद रिमोट रेपो पर चलते हैं। यह गिट खींचने के बाद स्थानीय रेपो पर इसे चलाने में मदद नहीं करता है। – decocijo

+1

@ डेकोसिजो हां, विचार * एक नंगे रेपो को * पुश * करना है, जो पोस्ट-प्राप्त हुक को ट्रिगर करेगा और एक गैर-नंगे रेपो पर जायेगा, जिससे 'गिट पुल' बन जाएगा। – VonC

14

जब आप git pull चलाते हैं, तो वास्तव में गिट एक विलय के बाद होता है। इसका मतलब है कि जब पुल पूरा हो जाता है तो आप स्क्रिप्ट निष्पादित करने के लिए post-merge हुक का उपयोग कर सकते हैं।

इसे सेट अप करने के लिए आपको post-merge नामक अपनी रिपोजिटरी की .git/hooks/ निर्देशिका में निष्पादन योग्य स्क्रिप्ट बनाने की आवश्यकता है।

ध्यान दें कि विवाद के कारण विलय विफल होने पर यह स्क्रिप्ट नहीं चलती है।

+4

हालांकि यह 'गिट फ़ेच' के लिए काम नहीं करेगा। इसके अलावा, कोई भी 'गिट पुल - रीबेस' कर सकता है, इसलिए आपको 'पोस्ट-रीराइट' के लिए भी एक हुक जोड़ना होगा। लेकिन फिर भी, आप एक स्टैंडअलोन मर्ज/रीबेस और पुल के बाद आने वाले व्यक्ति के बीच अंतर करने में सक्षम नहीं होंगे ... –

+0

शाखा कॉन्फ़िगरेशन के आधार पर यानी यदि यह रीबेज या विलय करने के लिए कॉन्फ़िगर किया गया है, तो आप या तो प्री- क्रमशः rebase या पोस्ट विलय। – solstice333

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