2009-02-05 3 views
17

मेरे पास एक ओपन सोर्स स्टेटिक जावास्क्रिप्ट + एचटीएमएल एप्लीकेशन है जो अभी लगभग तीन अलग-अलग स्थानों पर तैनात है, एक मेरी स्थानीय मशीन पर, एक आंतरिक सर्वर पर, और एक स्थिर बाहरी सर्वर पर।आप गिट प्रोजेक्ट की फ़ाइलों में वर्तमान प्रतिबद्ध आईडी कैसे शामिल करेंगे?

मैं तुरंत यह बताने में सक्षम होना चाहता हूं कि कौन सा संस्करण उस स्थान पर तैनात किया गया है, और मैं बग संवाददाताओं को उस संस्करण के लिए आसान पहुंच प्राप्त करना चाहता हूं जिस पर वे बग की रिपोर्ट कर रहे हैं।

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

दूसरी तरफ, मैं इसे बिल्ड प्रक्रिया के हिस्से के रूप में निर्माण में शामिल कर सकता हूं। मेरे पास वर्तमान में एक बिल्ड प्रक्रिया नहीं है, और यदि संभव हो तो मैं एक कदम जोड़ने से बचना चाहता हूं।

ऐसा करने का सबसे साफ तरीका क्या है?

उत्तर

6

इसे अपने स्वचालित तैनाती प्रणाली में जोड़ें।

यदि आपका तैनाती स्वचालित नहीं है, तो इसे स्वचालित करें और इसे वहां जोड़ें। फिर आपने एक कदम हटा दिया है।

इसे और अधिक उपयोगी बनाएं "यह जेड रिपोजिटरी से वाई समय पर एक्स दिनांक पर तैनात किया गया था"। प्रतिबद्धता का हैश वास्तव में गैर-डेवलपर्स के लिए बहुत कुछ नहीं है।

+5

मैं "गिट वर्णन" आउटपुट जोड़ूंगा। – Dustin

29

गिट की प्रकृति के कारण इसमें कुछ सूक्ष्मताएं हैं। जिस तरह से मैंने यह किया है वह गिट डेवलपर्स स्वयं क्या करता है इसकी प्रतिलिपि बनाकर। सबसे पहले, आप एनोटेटेड टैग का उपयोग करना चाहेंगे जो शायद वैसे भी एक अच्छा विचार है।

$ 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)" 
} 
+0

स्क्रिप्ट के अंत में कुछ टाइपो हैं। कुलपति = $: के साथ पिछले 3 लाइनों बदलें (sed -e के/^ संस्करण: // '$ VF) गूंज> और 2 "($ VF अद्यतन)" फाई नोट बंद करने') ' और अंतिम '}' को फाई के साथ बदलना। – Patrick

+0

मुझे लगता है कि प्रस्तुतकर्ता ने स्क्रिप्ट की कई पंक्तियों को निगल लिया है। मैंने कोड/पूर्व टैग में लपेटने के बजाय कोड को इंडेंट करने के लिए एक संपादन सबमिट किया है। पिछले कुछ लाइनों होना चाहिए '# मौजूदा संस्करण फ़ाइल' ' अगर परीक्षण -r $ VF' ' then' '\t कुलपति = $ (sed -e के/^ संस्करण: // 'पार्स < $ VF) '' else' '\t कुलपति = unset' ' fi' '# संस्करण बदल गया है, अद्यतन संस्करण-FILE' ' परीक्षण "$ वीएन" = "$ कुलपति" || {' ' \t गूंज "संस्करण: $ वीएन"> $ वीएफ' '\t गूंज> और 2" ($ वीएफ अपडेटेड) "' '}' – seanf

+0

वाह, बदसूरत। मैंने यहां पूरी स्क्रिप्ट की प्रतिलिपि बनाई है: https://gist.github.com/880771 – seanf

संबंधित मुद्दे