गिट की प्रकृति के कारण इसमें कुछ सूक्ष्मताएं हैं। जिस तरह से मैंने यह किया है वह गिट डेवलपर्स स्वयं क्या करता है इसकी प्रतिलिपि बनाकर। सबसे पहले, आप एनोटेटेड टैग का उपयोग करना चाहेंगे जो शायद वैसे भी एक अच्छा विचार है।
$ git tag -a -m "Version 0.2" v0.2 HEAD
फिर (के रूप में ओटो की पोस्ट में सुझाव दिया) आप एक उपयोगी "संस्करण" स्ट्रिंग है कि टैग और के बाद से प्रतिबद्ध की संख्या शामिल होगी के लिए git describe
उपयोग कर सकते हैं: समीक्षा करने के लिए, तो आप इस तरह एक नया टैग बना सकते हैं वर्तमान प्रतिबद्धता के sha1 के प्रमुख अंक।
$ git describe
v1.0-3-gee47184
है यही कारण है, इस प्रति 3 कि "v1.0" टैग के आगे करता है और SHA1 प्रतिबद्ध ee47184 साथ शुरू होता है (मुझे यकीन है कि क्यों वे शामिल नहीं कर रहा हूँ: यहाँ अपनी परियोजनाओं में से एक से एक उदाहरण है अग्रणी 'जी')।
गिट डेवलपर्स इसे एक कदम आगे लेते हैं और कार्यशील प्रति संशोधित (असम्बद्ध) में अतिरिक्त बिट भी शामिल करते हैं। इसके लिए कुछ और कदमों की आवश्यकता है, इसलिए यह सब एक स्क्रिप्ट में लिपटा हुआ है जिसे वे VERSION-GEN
नाम देते हैं। जब चलाया जाता है, तो यह संस्करण आउटपुट को मानक आउटपुट पर प्रिंट करता है और VERSION-FILE
फ़ाइल बनाता है (स्क्रिप्ट उस फ़ाइल को फिर से स्पर्श करने के लिए सावधान नहीं है यदि संस्करण नहीं बदला गया है - तो यह बिल्ड-टू-अनुकूल है)। उसके बाद, आप शामिल कर सकते हैं कि अपने स्रोत कोड में VERSION-FILE
फ़ाइल, मदद फ़ाइलें आदि
मेरी उदाहरण VERSION-GEN
स्क्रिप्ट (नीचे) का उपयोग करना, ऊपर के उदाहरण के लिए मेरे संस्करण स्ट्रिंग है:
$ VERSION-GEN
version: 1.0-3-gee47
अगर मैं संशोधित यह इस तरह दिखता है पर नज़र रखी फ़ाइलों के किसी भी:
$ VERSION-GEN
version: 1.0-3-gee47-mod
यहाँ VERSION-GEN
की मेरी थोड़ा बदलाव किया संस्करण है। ध्यान दें कि यह अपेक्षा करता है कि टैग मार्किंग संस्करण फॉर्म v [0-9] * (उदा। V1.0 या v0.2 या v12.3.4 या v12.2-4feb2009 आदि के हैं।)
#!/bin/sh
# Tag revisions like this:
# $ git tag -a -m "Version 0.2" v0.2 HEAD
VF=VERSION-FILE
DEFAULT_VERSION=UKNOWN
LF='
'
# First see if there is a version file (included in release tarballs),
# then try git-describe, then default.
if test -d .git -o -f .git &&
VN=$(git describe --abbrev=4 HEAD 2>/dev/null) &&
case "$VN" in
*$LF*) (exit 1) ;;
v[0-9]*)
git update-index -q --refresh
test -z "$(git diff-index --name-only HEAD --)" ||
VN="$VN-mod" ;;
esac
then
continue
#VN=$(echo "$VN" | sed -e 's/-/./g');
else
VN="$DEFAULT_VERSION"
fi
VN=$(expr "$VN" : v*'\(.*\)')
# Show the version to the user via stderr
echo >&2 "version: $VN"
# Parse the existing VERSION-FILE
if test -r $VF
then
VC=$(sed -e 's/^version: //' <$VF)
else
VC=unset
fi
# If version has changed, update VERSION-FILE
test "$VN" = "$VC" || {
echo "version: $VN" >$VF
echo >&2 "($VF updated)"
}
मैं "गिट वर्णन" आउटपुट जोड़ूंगा। – Dustin