एसवीएन के साथ हमेशा एक ही फाइल प्रतिबद्ध करें

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

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

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

0
ro fr bn

13 उत्तर

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

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

0
जोड़ा

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

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

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

0
जोड़ा

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

0
जोड़ा

@ गेटकिल्लर: ऐसा लगता है कि TortoiseSVN क्लाइंट साइड हुक का समर्थन करता है।

0
जोड़ा

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

इस प्रकार, आपको फ़ाइल को किसी भी तरीके से अपडेट करने की आवश्यकता है।

यदि आप विंडोज प्लेटफ़ॉर्म पर हैं, तो आप TortoiseSVN के साथ वितरित SubWCRev टूल का उपयोग कर सकते हैं। प्रलेखन यहां

0
जोड़ा

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

प्री-प्रतिबद्ध-हुक के बारे में अधिक जानकारी के लिए मैंने यह पृष्ठ उपयोगी पाया ।

0
जोड़ा

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

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

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

0
जोड़ा
मैंने इसे काम करने के लिए कभी नहीं मिला ...
जोड़ा लेखक GateKiller, स्रोत

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

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

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

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

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

0
जोड़ा
Opps, मैं "सेट संस्करण =" लाइन कॉपी करने के लिए भूल गया .. धन्यवाद!
जोड़ा लेखक dbr, स्रोत
यह काम नहीं करता है; $ {version} के बजाय $ (svn ...) आज़माएं।
जोड़ा लेखक Aaron Digulla, स्रोत

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

0
जोड़ा

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

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

svn propset svn:keywords "Revision" file.txt

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

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

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

  1. create a template file which contains your defines, maybe something like

    const long WC_REV = $WCREV$;

    in a file named version.h.tmpl

  2. on every build, call SubWCRev to create the 'real' file you can use in your application:

    SubWCRev path\to\workingcopy path\to\version.h.tmpl path\to\version.h

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

SubWCRev के लिए दस्तावेज़ भी मदद कर सकते हैं।

0
जोड़ा

असल में, आप फ़ाइल में svnversion कमांड का आउटपुट चाहते हैं।

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

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

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

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

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

0
जोड़ा