सामान्य तौर पर, गिट वस्तुओं का भंडार होता है। Git में 4 प्रकार की वस्तुएं हैं:
- बूँद - भंडारण डेटा के लिए।
- पेड़ - बूँद और अन्य पेड़ों के लिए लिंक भंडारण के लिए।
- प्रतिबद्ध - एक विशिष्ट वृक्ष वस्तु को इंगित करने के लिए, अर्थात्। समय में एक विशिष्ट बिंदु पर एक परियोजना स्नैपशॉट चिह्नित करना
- टैग - परियोजना के कुछ संस्करण के रूप में प्रतिबद्ध करने के लिए।
किसी भी वस्तु को उसके "ऑब्जेक्ट नाम" - 40 संख्याओं और अक्षरों (हेक्साडेसिमल प्रतिनिधित्व) का एक सेट द्वारा पहुँचा जा सकता है, जो इस ऑब्जेक्ट के डेटा का SHA1 है। इस प्रकार, जीआईटी में परियोजना स्रोत कोड की स्थिति को कमिट के "ऑब्जेक्ट नाम" या केवल कमिट द्वारा वर्णित किया जा सकता है। आप वर्तमान कमांड को एक लाइन में प्राप्त कर सकते हैं और निम्नलिखित कमांड का उपयोग करके इस पर टिप्पणी कर सकते हैं:
git log --pretty=oneline -n1
अब आपको बस इसे निष्पादन योग्य फ़ाइलों में जोड़ने और उपयोगकर्ता को प्रदर्शित करने की आवश्यकता है, उदाहरण के लिए, जब --version पैरामीटर के साथ कार्यक्रम शुरू करना।
इस प्रक्रिया को हुक की मदद से स्वचालित किया जा सकता है - कस्टम क्रियाएं जो कुछ कार्यों को गिट द्वारा निष्पादित किए जाने पर निष्पादित की जाएंगी। विभिन्न हुक हैं , लेकिन हमें केवल पोस्ट-कमिट (प्रसंस्करण गिट कमेटी के बाद कॉल), पोस्ट-चेकआउट (प्रोसेसिंग गिट चेकआउट के बाद कहा जाता है) और पोस्ट-मर्ज की आवश्यकता होती है (जिसे प्रोसेसिंग गेटिट मर्ज कहा जाता है, जिसे गिट पुल के दौरान भी कहा जाता है) । हुक $ GIT_DIR / हुक निर्देशिका में स्थित निष्पादनयोग्य हैं।
हुक रिपॉजिटरी में होने के लिए हुक के लिए यह git_hooks फ़ोल्डर बनाने और $ GIT_DIR / हुक के लिए एक सिमलिंक बनाने के लिए सुविधाजनक है। इस निर्देशिका में समान सामग्री वाली 3 पोस्ट-कमिट, पोस्ट-चेकआउट, पोस्ट-मर्ज फ़ाइलें बनाएँ। उदाहरण के लिए, हम C / C ++ प्रोजेक्ट का उपयोग करते हैं और हेडर फ़ाइल में एक स्ट्रिंग के रूप में कमिट को स्टोर करना चाहते हैं, फिर ये फाइलें इस तरह दिखाई देंगी:
#!/bin/sh # post-commit # file="git_commit.h" file_def=`echo $file|tr . _` echo "#ifndef $file_def" > $file echo "#define $file_def" >> $file echo "static const char *git_commit_str = \""`git log --pretty=oneline -n1`"\";" >> $file echo "#endif" >> $file # echo "--- Git commit is written to $file ---" echo "--- !!! NOW PLEASE RECOMPILE YOUR PROJECT TO TAKE EFFECT !!! ---"
अब प्रोजेक्ट में आप निम्न कोड डाल सकते हैं जो कमिट के संस्करण को आउटपुट करेगा।
#include git_commit.h … printf("Git commit: %s\n", git_commit_str);
हर बार git कमिट, git checkout, git पुल कहा जाता है (यदि स्थानीय संस्करण दूरस्थ संस्करण से भिन्न होता है), git_commit.h फ़ाइल अधिलेखित हो जाएगी और आवश्यक प्रतिबद्धताओं को प्रदर्शित करने के लिए परियोजना का पुनर्निर्माण करना आवश्यक होगा। भविष्य में, निष्पादन योग्य फ़ाइल होने पर, आप इस फ़ाइल के स्रोत कोड को git checkout COMMIT का उपयोग करके प्राप्त कर सकते हैं या यदि आप github.com/USER/PROJECT/tree/COMMIT पर github का उपयोग करते हैं तो वेब ब्राउज़र में स्रोत कोड देख सकते हैं।
वैसे, एसवीएन में उसी तरह से ऑपरेशन किया जा सकता है। एसवीएन में, परियोजना स्रोत कोड की स्थिति को वैश्विक संशोधन संख्या का उपयोग करके वर्णित किया गया है, जिसे svnversion कमांड का उपयोग करके प्राप्त किया जा सकता है, और हुक को पोस्ट-कमिट और पोस्ट-रिवप्रॉप-परिवर्तन घटनाओं पर लटका दिया जा सकता है।