हेलो!
आशा है आप बढ़िया होंगे! यह SMY है! 👋 चलिए शुरू करते हैं 🚀
....
मैंने एक उदाहरण कमिट-msg हुक स्थापित किया है जो प्रत्येक कमिट पर
↳ शाखा नाम परंपरा की जांच करता है अर्थात [प्रकार]/एबीसी-[टिकट संख्या]-[उद्देश्य]
↳ कमिट-msg कन्वेंशन की जांच करता है अर्थात [ABC-ticketnumber] [type]: उद्देश्य
↳ लिंट्स, प्रीटीयर की जांच करता है, तथा यूनिट परीक्षण चलाता है
सार लिंक: https://gist.github.com/smyasen/17083d60d02a07b2a3122410e2d39b6f
.....
Wait What?
But Why?
But How?
↳ Git हुक्स ऐसी स्क्रिप्ट हैं जो Git रिपॉजिटरी में किसी विशेष घटना के घटित होने पर स्वचालित रूप से चलती हैं।
↳ वे आपको Git के आंतरिक व्यवहार को अनुकूलित करने और विकास जीवन चक्र में प्रमुख बिंदुओं पर अनुकूलन योग्य क्रियाओं को ट्रिगर करने देते हैं।
↳ स्थानीय हुक और सर्वर-साइड हुक हैं।
↳ स्थानीय हुक आपकी मशीन और सर्वर-साइड पर दूरस्थ रिपोजिटरी पर चलते हैं।
स्थानीय हुक:
↳ प्री-कमिट ↳ प्रीपेयर-कमिट-msg ↳ कमिट-msg ↳ पोस्ट-कमिट ↳ पोस्ट-चेकआउट ↳ प्री-रीबेस
सर्वर हुक्स:
↳ पूर्व-प्राप्ति ↳ अद्यतन ↳ पश्चात-प्राप्ति
↳ उदाहरण के लिए, आप फ़ाइलों को कमिट करने से पहले लिंट चेक चलाना चाहते हैं, इसलिए हम प्री-कमिट हुक का उपयोग करते हैं।
↳ एक अन्य उदाहरण में आप मानक शाखा नाम और कमिट-msg कन्वेंशन को लागू करना चाहते हैं, इसलिए हम कमिट-msg हुक का उपयोग करते हैं।
↳ और भी बहुत कुछ...
↳ आसान सेटअप के लिए, जावास्क्रिप्ट प्रोजेक्ट में, हस्की नामक लाइब्रेरी स्थापित करें और दस्तावेज़ का पालन करें
https://www.npmjs.com/package/husky
↳ एक उदाहरण यह है कि मैं शाखा नाम, प्रतिबद्ध संदेश परंपरा को लागू करना चाहता हूं, और लिंट, प्रीटीयर और परीक्षण चलाना चाहता हूं।
↳ हम कई हुक का उपयोग कर सकते हैं। मेरे मामले में, मैं एक कमिट-msg हुक जोड़ूंगा। मैंने प्री-कमिट को इसलिए नहीं चुना क्योंकि यह कमिट से पहले चलने पर कमिट-msg की जांच नहीं करता। मैं नहीं चाहता कि कोई डेवलपर जांच चलाए और कमिट मैसेज में विफल हो जाए, उसे ठीक करे और फिर से चलाए। मैं पहले कमिट मैसेज की जांच करना चाहता हूं।
↳ हस्की के दस्तावेज़ का अनुसरण करते हुए एक कमिट-msg हुक बनाएं, और निम्नलिखित उदाहरण पेस्ट करें:
#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" # Checks for branch name currentBranch=$(git rev-parse --abbrev-ref HEAD) requiredPattern="^(build|chore|feat|docs|refactor|perf|test)/ABC-\d+-.+$" if ! echo "$currentBranch" | grep -qE $requiredPattern; then echo "\nInvalid branch name: $currentBranch" echo "-" echo "Should follow this pattern: build|chore|feat|docs|refactor|perf|test/ABC-ticketnumber-any-text" echo "-" echo "example: docs/ABC-123-update-readme.md" echo "-" echo "Refer to this for convention:" echo "-" echo "build : Changes related to building the code (eg adding npm dependencies or external libraries)." echo "-" echo "chore: Changes that do not affect the external user (eg updating the .gitignore file or .prettierrc file)." echo "-" echo "feat: A new feature." echo "-" echo "fix: A bug fix." echo "-" echo "docs: Documentation a related changes." echo "-" echo "refactor: A code that neither fix bug nor adds a feature." echo "-" echo "perf: A code that improves performance style: A code that is related to styling." echo "-" echo "test: Adding new test or making changes to existing test" echo "-\n" exit 1 # Branch name doesn't match the pattern, exit with error code fi # Checks for commit message commit_message="$(cat "$1")" pattern='^\[ABC-[0-9]+\] (build|chore|feat|docs|refactor|perf|test): .+$' if [[ ! $commit_message =~ $pattern ]]; then echo "\nInvalid commit message: $commit_message" echo "-" echo "Should follow this pattern: [ABC-ticketnumber] build|chore|feat|docs|refactor|perf|test: objective" echo "-" echo "example: [ABC-15] chore: updated .gitignore" echo "-" echo "Refer to this for convention:" echo "-" echo "build : Changes related to building the code (eg adding npm dependencies or external libraries)." echo "-" echo "chore: Changes that do not affect the external user (eg updating the .gitignore file or .prettierrc file)." echo "-" echo "feat: A new feature." echo "-" echo "fix: A bug fix." echo "-" echo "docs: Documentation a related changes." echo "-" echo "refactor: A code that neither fix bug nor adds a feature." echo "-" echo "perf: A code that improves performance style: A code that is related to styling." echo "-" echo "test: Adding new test or making changes to existing test" echo "-\n" exit 1 fi # npx lint-staged -- uncomment when have lint setted up # npm run test -- uncomment when have test setted up
↳ अब, जब भी आप कमिट करेंगे, यह लिंट चेक चलाने के साथ-साथ ब्रांच और कमिट नेमिंग कन्वेंशन की जांच करेगा। अंत में, यह अंत में परीक्षण चलाएगा, जब बाकी सब ठीक हो जाएगा।
✨स्थिरता.
✨ मानकीकरण.
✨ तुच्छ बातों पर ध्यान न दें।
✨ स्वचालित करें और प्रभाव पर ध्यान केंद्रित करें।
हमने अभी-अभी Git Hooks के साथ आपके विकास वर्कफ़्लो को उन्नत किया है।
.....
अब आप अपने विकास वर्कफ़्लो को सुपरचार्ज कर सकते हैं 🚀
बस इतना ही, दोस्तों! मुझे उम्मीद है कि यह आपके लिए एक अच्छा लेख रहा होगा। धन्यवाद! ✨