सामग्री पर जाएं
GitTree
परिवर्तन और कमिट

अपने काम को आपके कंप्यूटर से बाहर निकलने से पहले जांचने के लिए Git हुक का उपयोग करें

Git हुक एक स्क्रिप्ट है Git एक निश्चित समय पर अपने आप चलता है, जैसे किसी कमिट या पुश से ठीक पहले। Preferences › Hooks में, GitTree दिखाता है कि कब क्या चलता है, आपको तैयार किए गए टेम्पलेट्स से हुक जोड़ने, उन्हें संपादित करने और परीक्षण करने, उन्हें बंद और चालू करने और रिपॉजिटरी के माध्यम से अपनी टीम के साथ साझा करने की सुविधा देता है।

निःशुल्कअद्यतन किया गया

GitTree में काम करता है निःशुल्क: प्रत्येक स्थानीय Git सुविधा, बिना किसी खाते की आवश्यकता के।

इस पेज पर
  1. शुरू करने से पहले
  2. इसे कहां खोजें
  3. कदम
  4. अपेक्षित परिणाम
  5. हुक क्या हैं, और उनका उपयोग क्यों करें
  6. वे हुक जो आप सबसे अधिक उपयोग करेंगे
  7. तैयार टेम्पलेट
  8. टेस्ट रन क्या करता है
  9. अपनी टीम के साथ हुक साझा करें
  10. एक कमिट के लिए हुक छोड़ें
  11. अगर कुछ गलत होता है
  12. प्रश्न
  13. संबंधित

शुरू करने से पहले

  • एक भंडार खुला है: हुक एक भंडार से संबंधित हैं।
  • भंडार पर भरोसा है. प्रतिबंधित मोड में Git अपना कोई भी हुक नहीं चलाता है; आप अभी भी उन्हें पढ़ और संपादित कर सकते हैं (रिपॉजिटरी ट्रस्ट)।
  • हुक शेल स्क्रिप्ट हैं। टेम्प्लेट सादे sh का उपयोग करते हैं, जो macOS, Windows (Git for Windows के माध्यम से) और Linux सभी प्रदान करते हैं।

इसे कहां खोजें

  • कमिट बॉक्स: कमिट बटन के नीचे, May run: … कमिट चलाने वाले हुक को सूचीबद्ध करता है। Manage Hooks पृष्ठ खोलता है।
  • टूलबार में Tools, या बाएँ पैनल का TOOLS अनुभाग: Git hooks।
  • रिपॉजिटरी टैब का मेनू, या कमांड पैलेट: Manage Git Hooks…, या Alt+Shift+H।
  • Preferences (Mod+,) › Hooks। "हुक", "pre-commit" या "husky" के लिए प्राथमिकताएँ खोजने पर भी यह मिल जाता है।
कार्रवाईmacOSWindows और Linux
Git हुक प्रबंधित करें⌥⇧HAlt+Shift+H
प्राथमिकताएँ खोलें⌘,Ctrl+,

कदम

  1. हुक पृष्ठ खोलें

    Use Manage Hooks under the commit button or Alt+Shift+H. With several repositories open, choose one in Repository. The page starts with what hooks are, a three-step How it works guide and a link to this article.

  2. पढ़ें कब क्या चलता है

    What runs when कमिट फ्लो (pre-commit, prepare-commit-msg, commit-msg, post-commit) और पुश फ्लो (pre-push) दिखाता है। प्रत्येक चरण कहता है Runs, Off, Not executable या No hook, और क्या यह Can stop the action है या केवल रिपोर्ट करता है।

    लुमेन के लिए प्राथमिकताएँ हुक, कब क्या चलता है और commit-msg हुक निष्पादन योग्य नहीं के रूप में चिह्नित है
    पेज उन हुकों का नाम देता है जो Git कमिट और पुश पर चल सकता है, और शेयर थ्रू .githooks की पेशकश करता है।GitTree प्रदर्शन भंडार के साथ इंटरफ़ेस।
  3. एक हुक जोड़ें

    Add Hook… दबाएँ. When it runs के अंतर्गत, हुक उठाएँ; Start from के अंतर्गत, एक टेम्प्लेट चुनें, Git’s sample या Empty script। Script पूर्वावलोकन बिल्कुल वही दिखाता है जो लिखा जाएगा। Create Hook फ़ाइल को लिखता है, चलाने के लिए तैयार करता है, और उसे संपादक में खोलता है।

  4. स्क्रिप्ट संपादित करें

    Edit लाइन नंबरों के साथ स्क्रिप्ट खोलता है। इसे बदलें और Save (या Mod+S) दबाएँ। यदि फ़ाइल खोलने के बाद से डिस्क पर फ़ाइल बदल गई है, तो GitTree इसे अधिलेखित करने से इंकार कर देता है और आपका टेक्स्ट रखता है, ताकि आप दोबारा खोल सकें और तुलना कर सकें।

  5. इसे टेस्ट-रन करें

    Test Run अब हुक चलाता है, जिस तरह Git चलाता है, बिना किसी कमिट या पुश के। commit-msg और prepare-commit-msg के लिए, जांचने के लिए एक संदेश टाइप करें। आउटपुट स्ट्रीम होता है, और परिणाम बताता है कि Git क्या करेगा: Passed with exit code 0: Git would continue. या Failed with exit code 1: Git would stop here. Stop एक लंबे समय को समाप्त करता है।

  6. एक हुक बंद करें या उन्हें साझा करें

    हुक के पास का स्विच इसे <name>.disabled का नाम बदलकर बंद कर देता है और फिर से चालू कर देता है; कुछ भी नहीं हटाया गया है. Share Through .githooks आपकी टीम के लिए रिपॉजिटरी में हुक डालता है (नीचे देखें)।

अपेक्षित परिणाम

अगले कमिट या पुश से, Git Runs चिह्नित हुक चलाता है। कमिट बॉक्स की May run: … लाइन उन्हें नाम देती है, और जब यह कुछ प्रिंट करता है या कमिट बंद करता है तो हुक का आउटपुट Hook output के अंतर्गत दिखाई देता है।

हुक क्या हैं, और उनका उपयोग क्यों करें

Git हुक फ़ोल्डर में निश्चित नामों वाली निष्पादन योग्य फ़ाइलों की तलाश करता है (.git/hooks जब तक कि core.hooksPath अन्यथा न कहे) और उन्हें मिलान क्षणों पर चलाता है। एक हुक जो किसी क्रिया से पहले चलता है, जैसे कि pre-commit या pre-push, गैर-शून्य स्थिति से बाहर निकलकर इसे रोक सकता है। एक हुक जो इसके पीछे चलता है, जैसे कि post-commit या post-merge, केवल रिपोर्ट कर सकता है।

  • आपके कंप्यूटर को छोड़ने से पहले गलतियों को पकड़ें: असफल परीक्षण, लिंट त्रुटियां, बचे हुए विरोध मार्कर और बड़े आकार की फ़ाइलें।
  • कमिट संदेशों को सुसंगत रखें, उदाहरण के लिए Conventional Commits या प्रत्येक संदेश में एक समस्या कुंजी।
  • सीआई रन के विफल होने की प्रतीक्षा करने के बजाय, सेकंडों में फीडबैक प्राप्त करें।
  • रिपॉजिटरी में हुक रखकर पूरी टीम को समान चेक दें।

वे हुक जो आप सबसे अधिक उपयोग करेंगे

सामान्य क्लाइंट-साइड हुक
हुकजब Git इसे चलाता हैविशिष्ट उपयोग
pre-commitकमिट बनने से पहलेक्या स्टेजिंग किया गया है उस पर लिंट और त्वरित परीक्षण; मुख्य पर ब्लॉक कमिट करता है
prepare-commit-msgसंदेश लिखे जाने से पहलेसंदेश में शाखा के नाम से समस्या कुंजी डालें
commit-msgसंदेश लिखे जाने के बादसंदेश प्रारूप की जाँच करें, जैसे कि Conventional Commits
post-commitकमिट बनने के बादसूचित करें या लॉग करें; कमिट को पूर्ववत नहीं कर सकता
pre-pushरिमोट पर कुछ भी भेजने से पहलेपूर्ण परीक्षण सूट चलाएँ; संरक्षित शाखाओं को पुश करने से मना करें
post-mergeमर्ज या पुल करने के बादमान लीजिए कि लॉकफ़ाइल बदल गई है, तो निर्भरताएँ पुनः स्थापित हो जाती हैं
post-checkoutशाखाएँ बदलने के बादबिल्ड आउटपुट को साफ़ करें या जेनरेट की गई फ़ाइलों को ताज़ा करें

सर्वर हुक जैसे कि pre-receive और update केवल उस सर्वर पर चलते हैं जो पुश प्राप्त करता है। GitTree जब वे मौजूद होते हैं तो उन्हें सूचीबद्ध करता है लेकिन कभी उनका परीक्षण नहीं करता।

तैयार टेम्पलेट

हुक जोड़ें में टेम्पलेट
टेम्पलेटहुकयह क्या करता है
मुख्य शाखाओं को सुरक्षित रखेंpre-commitमुख्य या मास्टर पर सीधे किए गए कमिट को रोकता है
संघर्ष मार्करों और रिक्त स्थान को पकड़ेंpre-commitउस कमिट को रोकता है जो बचे हुए विरोध मार्करों या अनुगामी रिक्त स्थान को जोड़ता है (git diff --cached --check)
बड़ी फ़ाइलों को ब्लॉक करेंpre-commitउस कमिट को रोक देता है जो 5 एमबी से बड़ी फ़ाइल जोड़ता है
समस्या कुंजी जोड़ेंprepare-commit-msgप्रत्येक संदेश को शाखा नाम में समस्या कुंजी से प्रारंभ करता है, जैसे एबीसी-123
Conventional Commitscommit-msgfeat(parser): accept empty lines जैसे सारांश की आवश्यकता है
पुश करने से पहले परीक्षण चलाएँpre-pushएनपीएम टेस्ट, कार्गो टेस्ट, गो टेस्ट, पाइटेस्ट या मेक टेस्ट चलाता है और विफल होने पर पुश बंद कर देता है
दूरस्थ शाखाओं को सुरक्षित रखेंpre-pushस्टॉप सीधे रिमोट पर मेन या मास्टर को पुश करता है
निर्भरता अनुस्मारकpost-mergeकहते हैं कि जब कोई लॉकफ़ाइल पुल करने या मर्ज करने के बाद बदल जाती है

प्रत्येक टेम्प्लेट एक सामान्य स्क्रिप्ट है जिसकी सेटिंग सबसे ऊपर होती है, जैसे कि PROTECTED="main master" या TEST_COMMAND=""। अपने प्रोजेक्ट में फिट करने के लिए उन्हें संपादक में बदलें।

टेस्ट रन क्या करता है

GitTree हुक को git hook run के माध्यम से चलाता है, इसलिए Git इसे ढूंढता है और ठीक उसी तरह शुरू करता है जैसे वह वास्तविक कार्रवाई के दौरान करता है, जिसमें core.hooksPath भी शामिल है। हुक को बना-बनाया इनपुट मिलता है:

  • pre-commit, pre-merge-commit, post-commit और pre-auto-gc: कोई तर्क नहीं।
  • commit-msg और prepare-commit-msg: आपके द्वारा टाइप किया गया संदेश वाली एक अस्थायी फ़ाइल, जिसे बाद में हटा दिया गया।
  • pre-push: आपके पुश रिमोट का नाम और यूआरएल, इसके इनपुट पर कोई शाखा नहीं है।
  • post-merge: 0, जैसा कि सामान्य मर्ज के बाद होता है।

अपनी टीम के साथ हुक साझा करें

.git/hooks में हुक कभी कमिट नहीं होते हैं, इसलिए प्रत्येक क्लोन का अपना क्लोन होता है। Share Through .githooks उन्हें रिपॉजिटरी में एक .githooks फ़ोल्डर में कॉपी करता है और इस रिपॉजिटरी के कॉन्फिगरेशन में core.hooksPath सेट करता है। फ़ोल्डर कमिट करें; प्रत्येक टीम का साथी क्लोनिंग के बाद इसे एक बार चलाता है:

git config core.hooksPath .githooks

Use This Clone’s Own Hooks उस सेटिंग को फिर से हटा देता है। .githooks फ़ोल्डर और .git/hooks में आपके हुक वहीं रहेंगे जहां वे हैं।

एक कमिट के लिए हुक छोड़ें

कमिट बॉक्स में Commit Options खोलें और Skip Hooks (--no-verify) चालू करें। फिर Git उस कमिट के लिए pre-commit और commit-msg को छोड़ देता है; prepare-commit-msg और post-commit अभी भी चलते हैं, और कमिट बटन के नीचे की रेखा ऐसा कहती है। किसी हुक को अधिक समय तक रोकने के लिए, उसे हुक पृष्ठ पर बंद कर दें।

अगर कुछ गलत होता है

एक हुक Not executable दिखाता है और कभी चलता नहीं है।

macOS और Linux पर Git निष्पादन अनुमति के बिना एक हुक फ़ाइल को छोड़ देता है। Make Executable दबाएँ; GitTree इसे केवल वहीं जोड़ता है जहां फ़ाइल पढ़ने योग्य है।

"खोलने के बाद से डिस्क पर हुक बदल गया; नई सामग्री देखने के लिए इसे फिर से खोलें।"

किसी अन्य प्रोग्राम या हुक मैनेजर ने फ़ाइल को दोबारा लिखा। संपादक को बंद करें, इसे दोबारा खोलें, और अपने परिवर्तन को नई सामग्री पर लागू करें।

"यह हुक एक लिंक है। GitTree कभी भी लिंक के माध्यम से नहीं लिखता है; जिस फ़ाइल की ओर वह इंगित करता है उसे संपादित करें।"

हुक एक प्रतीकात्मक कड़ी है, जो अक्सर हुक प्रबंधक द्वारा बनाई जाती है। वह फ़ाइल जिसे वह इंगित करता है, या उस टूल के कॉन्फ़िगरेशन को संपादित करें।

स्क्रिप्ट macOS पर काम करती है, लेकिन “खराब दुभाषिया” या \ त्रुटियों के कारण Linux पर विफल हो जाती है।

फ़ाइल में Windows पंक्ति अंत (CRLF) है। संपादक उनके बारे में चेतावनी देता है; स्क्रिप्ट को LF लाइन के अंत के साथ सहेजें।

Test Run धूसर हो गया है।

इसका कारण बटन के बगल में है: रिपॉजिटरी पर भरोसा करें, हुक चालू करें, इसे निष्पादन योग्य बनाएं, या ध्यान दें कि यह हुक केवल वास्तविक गिट ऑपरेशन के दौरान इनपुट प्राप्त करता है।

प्रश्न

क्या हुक मुफ़्त योजना का हिस्सा हैं?

हाँ। प्रबंधन, संपादन, परीक्षण-चलाना और हुक साझा करना स्थानीय Git है और इसके लिए किसी होस्टिंग खाते की आवश्यकता नहीं है।

जब मैं इसे बंद करता हूँ तो क्या GitTree हुक हटा देता है?

नहीं, स्विच ऑफ करने से फ़ाइल का नाम बदलकर <name>.disabled हो जाता है; स्विच ऑन करने से इसका नाम वापस बदल जाता है। GitTree कभी भी हुक नहीं हटाता।

क्या मेरे द्वारा बनाया गया हुक कमिट होगा?

तब नहीं जब यह .git/hooks में हो। हुक्स को रिपॉजिटरी में रखने के लिए Share Through .githooks का उपयोग करें, जहां वे किसी भी अन्य फ़ाइल की तरह कमिट हैं।

क्या हुक को Node.js या पायथन में लिखा जा सकता है?

हाँ। Git अपनी पहली पंक्ति में प्रोग्राम के साथ फ़ाइल चलाता है, जैसे कि #!/usr/bin/env node; संपादक उस प्रोग्राम को Runs with node के रूप में दिखाता है। प्रोग्राम को हुक चलाने वाले प्रत्येक कंप्यूटर पर इंस्टॉल किया जाना चाहिए।