2008-08-08 18 views
9

के साथ प्रतिबद्ध करें मेरे वेब एप्लिकेशन में मेरे पास एक फ़ाइल है जो वर्तमान संशोधन संख्या $ Rev $ के माध्यम से रखती है। यह ठीक काम करता है, अगर मैं उस फ़ाइल में कोई बदलाव नहीं करता हूं, तो यह प्रतिबद्ध नहीं होता है।हमेशा एक ही फ़ाइल को एसवीएन

क्या वैसे भी मैं हमेशा एक फ़ाइल को एसवीएन सर्वर पर प्रतिबद्ध होने के लिए मजबूर कर सकता हूं?

मैं विंडोज के लिए TortoiseSVN का उपयोग कर रहा हूं, इसलिए कोई भी कोड या चरण-दर-चरण निर्देश सहायक होंगे।

उत्तर

9

यदि आपके पास TortoiseSVN इंस्टॉल है, तो आपके पास SubWCRev टूल भी उपलब्ध है। $ REV $ कीवर्ड का दुरुपयोग करने के बजाय संशोधन प्राप्त करने के लिए उस टूल का उपयोग करें।

  1. एक टेम्पलेट फ़ाइल में आपका परिभाषित करता है, हो सकता है

    की तरह कुछ होता है बनाने के

    स्थिरांक लंबे WC_REV = $ WCREV $;

    हर निर्माण पर version.h.tmpl

  2. नामक फ़ाइल में

    , 'असली' फ़ाइल आप अपने आवेदन में उपयोग कर सकते हैं SubWCRev बनाने के लिए कॉल करें:

    SubWCRev पथ \ to \ workingcopy पथ \ \ के लिए पथ version.h.tmpl \ \ version.h

यह version.h.tmpl से version.h फ़ाइल पैदा करेगा, पाठ $ WCREV $ संशोधन अपने काम की नकल है के साथ बदल के साथ करने के लिए वर्तमान में

docs for SubWCRev भी मदद कर सकता है।

1

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

3

यह ठीक है, अगर मैं उस फ़ाइल में कोई बदलाव नहीं करता हूं, तो यह काम नहीं करता है।

यदि फ़ाइल कभी नहीं बदली जाती है, तो आपको हर बार संचार करने की आवश्यकता क्यों होगी?

[संपादित करें] @ सेन = मैं समझता हूं कि वह क्या करने की कोशिश कर रहा है, लेकिन अगर फ़ाइल को हुक या किसी अन्य प्रक्रिया के माध्यम से अपडेट नहीं किया जा रहा है और इसलिए कभी नहीं बदल रहा है तो एसवीएन इसे कभी नहीं उठाएगा।

1

@gradonmantank: क्योंकि वह चाहता है कि फ़ाइल नवीनतम संशोधन संख्या के साथ अपडेट हो। क्या आपने अपना प्रश्न पूरी तरह पढ़ा?

प्री-प्रतिबद्ध हुक काम कर सकता है।

1

मुझे ऐसा करने का मैन्युअल तरीका होता था। मैं एक स्क्रिप्ट चलाऊंगा जो मेरी $ Rev $ फ़ाइल में वर्तमान टाइमस्टैम्प के साथ एक टिप्पणी को प्रतिस्थापित करने के लिए sed का उपयोग करेगी। इस तरह, फ़ाइल सामग्री बदल जाएगी और सबवर्जन इसे प्रतिबद्ध करेगा।

मैंने जो किया वह अगले चरण में नहीं लेना था: प्रक्रिया को स्वचालित करने के लिए Subversion's repository hooks का उपयोग करना। समस्या है, मुझे यकीन नहीं है कि आपको हुक में फ़ाइल सामग्री बदलने की अनुमति है या नहीं। प्रलेखन का सुझाव है कि आप नहीं कर सकते हैं।

इसके बजाय, मुझे लगता है कि आपको svn commit कमांड के स्थान पर निष्पादित करने की एक छोटी सी स्क्रिप्ट की आवश्यकता होगी जो पहले टाइमस्टैम्प अपडेट करता है और फिर सामान्य प्रतिबद्धता चलाता है।

+0

मुझे यह काम करने के लिए कभी नहीं मिला ... – GateKiller

1

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

इस तरह के रूप में, आप फ़ाइल के बजाय किसी तरह से अद्यतन किया जा करने के लिए मजबूर करने की जरूरत है।

आप Windows मंच पर हैं, तो आप SubWCRev उपकरण, TortoiseSVN के साथ वितरित कर सकते हैं। दस्तावेज़ीकरण here

1

आप SVN पूर्व प्रतिबद्ध-हुक का उपयोग यह करने के लिए कर सकते हैं।
सामान्य विचार मेरे मन में है एक बनाने है कि इससे पहले कि प्रतिबद्ध (svnlook का उपयोग कर इसे पाने) फ़ाइल में नए संशोधन संख्या डाल या हो सकता है (फ़ाइल पर एक फर्जी संपत्ति को बदलने इसे बदलने के लिए है या SVN इसे अनदेखा करेगा)।

प्री-प्रतिबद्ध-हुक के बारे में अधिक जानकारी के लिए मुझे this page उपयोगी मिला।

2

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

2

क्या संशोधन-संख्या फ़ाइल को उस स्क्रिप्ट द्वारा बदला जा सकता है जो आपकी वेबसाइट को एसवीएन से वेब-सर्वर पर तैनात करता है?

विंडोज पर के बारे में सुनिश्चित नहीं हैं, लेकिन एक पार्टी-स्क्रिप्ट का उपयोग कर, मैं कुछ की तरह करना होगा ..

$ version=$(svnversion) 
$ svn export . /tmp/staging/ 
Export complete. 
$ echo "Revision: ${version}" > /tmp/staging/version.txt 

फिर /tmp/staging/version.txt "संशोधन: 1" होते हैं (या जो भी उच्चतम संशोधन संख्या है)।

आप निश्चित रूप से कुछ पहचानकर्ता एक फ़ाइल में, $Rev$ तरह

+0

यह काम नहीं करता है; $ {version} के बजाय $ (svn ...) आज़माएं। –

+0

Opps, मैं "सेट संस्करण =" लाइन कॉपी करने के लिए भूल गया .. धन्यवाद! इस विचार के लिए – dbr

13

मूल रूप से, आप एक फ़ाइल में svnversion आदेश के उत्पादन में चाहते हैं (बजाय ऊपर के उदाहरण के अनुसार version.txt बनाने की) की जगह सकता है।

ऐसी फाइलें आमतौर पर संग्रह से बाहर रखी जाती हैं, और स्वचालित रूप से एक निर्माण स्क्रिप्ट द्वारा बनाई गई हैं। मैं आपको भी ऐसा ही करने की सलाह देता हूं। यदि आप निर्माण नहीं करते हैं, लेकिन सर्वर पक्ष पर svn up पर, पर svn up के बाद बस कॉल करें या दोनों क्रियाओं को करने के लिए शेल स्क्रिप्ट बनाएं।

आप दूसरी ओर भंडार में रखने के लिए, एक में svnversion बुला है, तो पूर्व प्रतिबद्ध हुक आपका सर्वश्रेष्ठ दांव होगा।

+1

+1। हालांकि मैं जोड़ना चाहता हूं कि बड़े भंडारों में, svnversion को चलाने के लिए एक लंबा समय लग सकता है (एक मिनट से अधिक)। इस कारण से, मैं इसके बजाय 'svn info' आउटपुट पार्स करता हूं। –

6

मुझे लगता है कि आप समझ नहीं सकते कि $ Rev $ ध्वज कैसे काम करता है। रेव फ्लैग का लक्ष्य यह संशोधन हमेशा उपवर्तन भंडार में नहीं होना चाहिए। लक्ष्य यह है कि एक अद्यतन पर, रेव ध्वज हमेशा संशोधन होगा।आपको कोड को उपversण में डालने की आवश्यकता नहीं है जिसमें संशोधन शामिल है। आपके लिए उस जानकारी को ट्रैक रखने में सबवर्सन बहुत अच्छा है।

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

svn propset svn:keywords "Revision" file.txt 

यह सुनिश्चित करेगा कि जब भी आप कोई अपडेट करेंगे, $ Rev: xxx $ ध्वज वर्तमान संशोधन के साथ अपडेट किया जाएगा। आपको चिंता करने की आवश्यकता नहीं है कि यह भंडार के लिए प्रतिबद्ध कैसे है।

+0

मुझे लगता है कि @Stefan का मतलब कुछ अलग था। बेशक, $ रेव $ आपको * उस विशेष फ़ाइल * की अंतिम प्रतिबद्धता का उपयुक्त संशोधन संख्या देगा। लेकिन मुझे लगता है कि स्टीफन पूरी परियोजना का नवीनतम संशोधन संख्या चाहता है और इसे अपने सॉफ्टवेयर के किसी प्रकार की संस्करण संख्या के रूप में उपयोग करना चाहता है। – user2161065

1

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

यदि आप मेवेन का उपयोग करते हैं, तो आप इसे मेवेन-बिल्डनंबर-प्लगइन के साथ कर सकते हैं।

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