2012-10-13 15 views
11

मैं जो कर रहा हूं, मुझे लगता है कि मुझे काफी सरल होना चाहिए, लेकिन मुझे यह पता लगाना प्रतीत नहीं होता कि इसे कैसे काम करना है।तैनाती के दौरान फ़ाइलों में गिट संशोधन संख्या डालें

मैं दो कारणों से HTML और जावास्क्रिप्ट फ़ाइलों में एक अद्वितीय संस्करण संख्या एम्बेड करना चाहता हूं। पहला कारण है कि मैं यह सुनिश्चित करें कि जब जावास्क्रिप्ट फ़ाइल लोड किया जाता है, प्रणाली अगर वहाँ एक नया संस्करण है कैश का उपयोग करने का प्रयास नहीं करता चाहते है, लेकिन अगर मैं इसे

<script src="/app.js?v1.0.1-1-95425234"></script> 

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

मैं रास्ते में git describe पर आया, और मुझे लगता है कि यह आउटपुट मूल्य इसके लिए वास्तव में उपयुक्त होगा।

मूल रूप से मैं GIT-CURRENT-VERSION की तरह मेरे जावास्क्रिप्ट और HTML फ़ाइलों में एक महत्वपूर्ण लेने के लिए और मैं अपने तैनाती विधि के लिए कपड़े का उपयोग कर रहा git describe

के उत्पादन के साथ इसे बदलना चाहते है, तो यह समझ का एक बहुत होगा गिट के नवीनतम संस्करण को पकड़ने के बाद, सर्वर की ओर से करें।

मुझे संदेह है कि sed और grep का कुछ संयोजन यहां चाल करेगा, और यदि मैं इसके लिए एक लाइनर समझ सकता हूं, तो मेरी तैनाती स्क्रिप्ट में जोड़ना वास्तव में आसान होगा।

अग्रिम धन्यवाद!

+0

आप किस वेब ढांचे का उपयोग करते हैं? मुझे लगता है कि "जीआईटी-वर्तमान-संस्करण" के रिकर्सिव प्रतिस्थापन जैसे बेहतर समाधान हैं। – guettli

+0

guettli - मैंने पोस्ट किया जो मैंने उपयोग किया था। आशा करता हूँ की ये काम करेगा! –

उत्तर

5

आप अपने तैनात Git पेड़ की जड़ से निम्नलिखित की तरह कुछ कर सकता है:

export VERSION="$(git describe)" 
find . -type f -print0 | xargs -0 sed -i "s/GIT-CURRENT-VERSION/$VERSION/g" 

(यही कारण है कि केवल सरसरी परीक्षण किया था है - सावधानी के साथ उपयोग करें।)

ध्यान दें कि कि आपके पेड़ छोड़ देंगे स्थानीय संशोधन के साथ।

9

मैंने कभी fabric के बारे में नहीं सुना है, लेकिन यदि कपड़े git archive का उपयोग करता है (तो आप gitattributes का उपयोग कर सकते हैं। यही कारण है, आप की तरह कुछ के साथ अपने HTML फ़ाइलों हो सकता है कर सकते हैं:

<script src="/app.js?$Format:%H$"></script> 

और .gitattributes में भंडार के शीर्ष पर:

*.html export-subst 

फिर, जब भी आप git-archive के साथ एक संग्रह बनाने के लिए, $Format:%H$ हो जाएगा प्रतिबद्धता के हैश द्वारा प्रतिस्थापित किया गया। git-log में आप जो कुछ भी --pretty-format के साथ उपलब्ध कर सकते हैं उसका उपयोग कर सकते हैं।

चेक gitattributes, या बहुत बेहतर के मैनुअल: अध्याय "8.2 Customizing Git - Git Attributes" की Pro Git पुस्तक अधिक विचार प्राप्त करने के।

1

गेट्ली की टिप्पणी के साथ, मैंने सोचा कि मैंने अंतिम परिणाम पोस्ट किया है जो मेरे पास था। ऊपर मार्क मार्कैयर के समाधान के आधार पर मेरा समाधान यहां दिया गया है।

export DESCRIPTION="$(git describe)" 
find [PATH] -regextype posix-extended -regex ".*\.(js|html)" -type f -print0 | xargs -0 sed -i "s/CURRENT-GIT-DESCRIPTION/$DESCRIPTION/g" 

मैं यहां जो कुछ कर रहा हूं उसके बारे में थोड़ा सा स्पष्टीकरण दूंगा।

export DESCRIPTION="$(git describe)" गिट भंडार की वर्तमान स्थिति का वर्तमान वर्णन प्राप्त करता है। अधिक जानकारी के लिए, git describe Manual Page देखें।

अगला, find [PATH] -regextype posix-extended -regex ".*\.(js|html)" -type f -print0 आप अपने भंडार के पथ के साथ [PATH] के साथ प्रतिस्थापित कर सकते हैं। -regextype posix-extended -regex ".*\.(js|html)" आपकी निर्देशिकाओं के माध्यम से उतरता है और ".*\.(js|html)" द्वारा परिभाषित रेगेक्स से मेल खाने वाली सभी फाइलें पाता है। मेरे मामले में, मुझे पता है कि मैं केवल जावास्क्रिप्ट या एचटीएमएल फाइलों में प्रतिस्थापन होना चाहता हूं। अंत में xargs -0 sed -i "s/CURRENT-GIT-DESCRIPTION/$DESCRIPTION/g" सिस्टम को को git describe द्वारा परिभाषित मान के साथ बदलने के लिए कहता है।

मेरे मामले में, यह बहुत अच्छी तरह से काम करता है, क्योंकि मैं सर्वर पर तैनाती के लिए fabric का उपयोग कर रहा हूं, और क्योंकि मैं चाहता हूं कि परिवर्तन वास्तविक समय हो, मैं जो करता हूं वह भंडार को अद्यतन करता है, और उसके बाद इसे कॉपी करता है सिस्टम की नई तैनाती। एक बार सिस्टम जाने के लिए तैयार हो जाने के बाद, मैं गिट डेटा फ़ाइलों से छुटकारा पाता हूं, इसे एक नियमित डेटा संरचना के रूप में छोड़ देता हूं। अब मैं सिस्टम को नए निर्माण का उपयोग करने के लिए कह सकता हूं, और सबकुछ जाने के लिए तैयार है।

आशा है कि अन्य लोगों को कुछ समान प्राप्त करने में मदद मिलेगी!

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