Git और Python के साथ एक वर्जनिंग सिस्टम बनाना
एक संगठित और कुशल विकास वर्कफ़्लो को बनाए रखने के लिए आपकी प्रोजेक्ट फ़ाइलों के संस्करण को स्वचालित करना महत्वपूर्ण है। Git और Python का उपयोग करके, आप एक ऐसा सिस्टम बना सकते हैं जो प्रत्येक कमिट के साथ एक Version.py फ़ाइल को अपडेट करता है। यह सुनिश्चित करता है कि आपका प्रोजेक्ट संस्करण हमेशा सटीक है और आपके कोडबेस में किए गए नवीनतम परिवर्तनों को दर्शाता है।
इस गाइड में, हम आपके Git रिपॉजिटरी में प्रत्येक पुश पर एक Version.py फ़ाइल को स्वचालित रूप से अपडेट करने की एक विधि का पता लगाएंगे। हम एक स्क्रिप्ट के कार्यान्वयन पर चर्चा करेंगे जो प्रतिबद्ध विवरणों को कैप्चर करता है, संस्करण संख्या बढ़ाता है, और आपके Git वर्कफ़्लो के साथ सहजता से एकीकृत करता है।
गिट हुक का उपयोग करके पायथन में संस्करण को स्वचालित करना
प्री-पुश हुक के लिए पायथन स्क्रिप्ट
#!/usr/bin/env /usr/bin/python
import os
import subprocess
import re
import sys
commit_msg_file = sys.argv[1]
with open(commit_msg_file, 'r') as file:
commit_msg = file.read().strip()
version_file = os.path.abspath('version.py')
hashed_code = subprocess.check_output(['git', 'rev-parse', 'HEAD']).strip().decode('utf-8')
if os.path.exists(version_file):
print(f'Reading previous {version_file}')
with open(version_file, 'r') as f:
content = f.read()
major, minor, patch = map(int, re.search(r'version = "(\d+)\.(\d+)\.(\d+)"', content).groups())
patch += 1
else:
print(f'Creating new {version_file}')
major, minor, patch = 0, 0, 1
print(f'Writing contents of {version_file} with "{commit_msg}"')
with open(version_file, 'w') as f:
f.write(f'''# This file is created by the pre-push script
class Version:
comment = "{commit_msg}"
hash = "{hashed_code}"
version = "{major}.{minor}.{patch}"
if __name__ == "__main__":
print(Version.version)
''')
subprocess.call(['git', 'add', version_file])
संस्करण वृद्धि के लिए गिट हुक की स्थापना
शेल में गिट हुक स्क्रिप्ट
#!/bin/sh
VERSION_PY="version.py"
# Get the commit message file from the arguments
COMMIT_MSG_FILE=$1
# Extract the commit message
COMMIT_MSG=$(cat $COMMIT_MSG_FILE)
# Get the latest commit hash
GIT_HASH=$(git rev-parse HEAD)
if [ -f "$VERSION_PY" ]; then
VERSION=$(grep -oP '(?<=version = ")(\d+\.\d+\.\d+)' $VERSION_PY)
IFS='.' read -r -a VERSION_PARTS <<< "$VERSION"
VERSION_PARTS[2]=$((VERSION_PARTS[2] + 1))
NEW_VERSION="${VERSION_PARTS[0]}.${VERSION_PARTS[1]}.${VERSION_PARTS[2]}"
else
NEW_VERSION="0.0.1"
fi
echo "# This file is created by the pre-push script" > $VERSION_PY
echo "class Version:" >> $VERSION_PY
echo " comment = \"$COMMIT_MSG\"" >> $VERSION_PY
echo " hash = \"$GIT_HASH\"" >> $VERSION_PY
echo " version = \"$NEW_VERSION\"" >> $VERSION_PY
git add $VERSION_PY
स्वचालित संस्करण के साथ Git वर्कफ़्लो को बढ़ाना
Git वर्कफ़्लो के भीतर संस्करण को स्वचालित करने से न केवल स्थिरता सुनिश्चित होती है, बल्कि सॉफ़्टवेयर प्रोजेक्ट्स में ट्रैसेबिलिटी में भी सुधार होता है। संस्करण प्रबंधन को सीधे Git हुक में एकीकृत करके, डेवलपर्स एक सहज और कुशल प्रक्रिया बनाए रख सकते हैं। एक तरीका यह है कि प्रत्येक कमिट के साथ एक संस्करण फ़ाइल को स्वचालित रूप से अपडेट करने के लिए Git के प्री-पुश हुक का उपयोग किया जाए। इस पद्धति में प्रतिबद्ध संदेशों और हैश मानों को कैप्चर करना शामिल है, जो परिवर्तनों को ट्रैक करने और कोडबेस के ऐतिहासिक रिकॉर्ड को बनाए रखने के लिए आवश्यक हैं।
एक अन्य महत्वपूर्ण पहलू परिवर्तनों को सटीक रूप से वापस लाने की क्षमता है। अप-टू-डेट संस्करण फ़ाइल के साथ, डेवलपर्स किसी भी दिए गए संस्करण में प्रोजेक्ट की सटीक स्थिति का पता लगा सकते हैं। यह निरंतर एकीकरण और परिनियोजन (सीआई/सीडी) वातावरण में विशेष रूप से उपयोगी है, जहां स्वचालन महत्वपूर्ण है। यह सुनिश्चित करना कि प्रत्येक प्रतिबद्धता के साथ संस्करण फ़ाइल को विश्वसनीय रूप से अद्यतन किया जाता है, एक मजबूत तैनाती पाइपलाइन को बनाए रखने, मैन्युअल त्रुटियों को कम करने और रिलीज़ को सुव्यवस्थित करने में मदद करता है।
Git और Python के साथ स्वचालित संस्करण के बारे में सामान्य प्रश्न
- मैं अपने Git रिपोजिटरी में संस्करणीकरण को कैसे स्वचालित कर सकता हूँ?
- आप प्रत्येक कमिट पर एक संस्करण फ़ाइल को अपडेट करने के लिए प्री-पुश हुक और स्क्रिप्ट जैसे गिट हुक का उपयोग करके संस्करण को स्वचालित कर सकते हैं।
- प्री-पुश हुक क्या है?
- प्री-पुश हुक एक Git हुक है जो परिवर्तनों को रिमोट रिपॉजिटरी में धकेलने से पहले स्क्रिप्ट चलाता है। इसका उपयोग संस्करण फ़ाइल को अपडेट करने जैसे कार्यों को स्वचालित करने के लिए किया जा सकता है।
- मैं Git हुक स्क्रिप्ट में कमिट संदेश तक कैसे पहुँच सकता हूँ?
- आप आमतौर पर स्क्रिप्ट के तर्क के रूप में पारित फ़ाइल को पढ़कर प्रतिबद्ध संदेश तक पहुंच सकते हैं sys.argv पायथन में या $1 एक शेल स्क्रिप्ट में.
- कौन सा कमांड नवीनतम Git कमिट हैश को पुनः प्राप्त करता है?
- आदेश git rev-parse HEAD Git रिपॉजिटरी में नवीनतम कमिट हैश पुनर्प्राप्त करता है।
- मैं स्क्रिप्ट में संस्करण संख्या कैसे बढ़ाऊं?
- वर्तमान संस्करण को निकालने, पैच संख्या बढ़ाने और नए संस्करण संख्या के साथ संस्करण फ़ाइल को फिर से लिखने के लिए नियमित अभिव्यक्तियों का उपयोग करें।
- क्या मैं इस पद्धति का उपयोग निरंतर एकीकरण टूल के साथ कर सकता हूँ?
- हां, बिल्ड और परिनियोजन में संस्करण स्थिरता सुनिश्चित करने के लिए गिट हुक के साथ स्वचालित संस्करण को सीआई/सीडी पाइपलाइनों में एकीकृत किया जा सकता है।
- स्वचालित संस्करण के क्या लाभ हैं?
- स्वचालित संस्करण मैन्युअल त्रुटियों को कम करता है, लगातार संस्करण ट्रैकिंग सुनिश्चित करता है, और विकास और तैनाती प्रक्रिया को सुव्यवस्थित करता है।
- मैं यह कैसे सुनिश्चित करूँ कि संस्करण फ़ाइल अगली प्रतिबद्धता में शामिल है?
- उपयोग git add स्क्रिप्ट द्वारा अद्यतन किए जाने के बाद संस्करण फ़ाइल को चरणबद्ध करने के लिए।
- यदि संस्करण फ़ाइल मौजूद नहीं है तो क्या होगा?
- यदि संस्करण फ़ाइल मौजूद नहीं है, तो स्क्रिप्ट इसे प्रारंभिक संस्करण संख्या, जैसे 0.0.1, के साथ बना सकती है।
- क्या Git हुक के लिए अन्य प्रोग्रामिंग भाषाओं का उपयोग करना संभव है?
- हां, आप अपनी पसंद और प्रोजेक्ट आवश्यकताओं के आधार पर विभिन्न प्रोग्रामिंग भाषाओं, जैसे पायथन, बैश या पर्ल में गिट हुक स्क्रिप्ट लिख सकते हैं।
स्वचालित संस्करण पर अंतिम विचार
प्रत्येक Git पुश के साथ Version.py फ़ाइल के अपडेट को स्वचालित करना आपके प्रोजेक्ट में सटीक संस्करण नियंत्रण बनाए रखने के लिए एक व्यावहारिक समाधान है। प्रदान की गई स्क्रिप्ट इस प्रक्रिया को स्वचालित करने के लिए Git हुक और Python का लाभ उठाती है, जिससे यह सुनिश्चित होता है कि प्रत्येक कमिट को एक अद्यतन संस्करण संख्या, कमिट संदेश और हैश के साथ ट्रैक किया जाता है। इस पद्धति को लागू करने से आपके वर्कफ़्लो में काफी वृद्धि हो सकती है, जिससे यह अधिक कुशल हो जाएगा और मानवीय त्रुटि की संभावना कम हो जाएगी। दिए गए दिशानिर्देशों और उदाहरणों का पालन करके, आप स्वचालित संस्करण को अपनी विकास प्रथाओं में आसानी से एकीकृत कर सकते हैं।