2009-10-08 11 views
5

मैं अपनी कंपनी के लिए svn externals में देख रहा हूं, और ऐसा लगता है कि यह हमारे लिए उपयोग करने के लिए एक अच्छी सुविधा होगी। हमारे पास कई उत्पाद हैं जो अक्सर साझा घटकों का संदर्भ देते हैं, लेकिन कभी-कभी पुराने संस्करणों में और पीछे से अलग ब्रांडेड कोडबेस में गिरने की बुरी आदत भी होती है।एसवीएन बाहरीों को समझने में सहायता

मैंने अब काम करने के बारे में एक सभ्य बिट पढ़ा है, और मुझे लगता है कि मैं अवधारणा को ठीक समझता हूं। मैं 100% निश्चित नहीं हूं कि एकाधिक रिपॉजिटरीज के एक साथ लिंक कितने अलग हैं।

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

मैं लाइब्रेरी के नवीनतम संस्करण का संदर्भ देते समय, वर्षों में उत्पाद के कई संस्करणों का निर्माण करता हूं। एक दिन हालांकि मुझे सही संशोधन का चयन करके वापस जाना होगा और उत्पाद संस्करण 1 को देखना होगा। जब मैं ऐसा करता हूं, लाइब्रेरी का कौन सा संस्करण मुझे मिलता है, हेड या संशोधन जो मैंने पहली बार बनाया था जब मैंने पहली बार बनाया था?

उम्मीद है कि मैं एक अच्छा डेवलपर रहा हूं और रिलीज किए गए उत्पाद के हर संस्करण को टैग करने के लिए याद किया गया है। जब मैं अपने टैग 'उत्पाद-1-0-0' को भंडार में लागू करता हूं, क्या लाइब्रेरी भंडार का सही संशोधन भी टैग किया जाता है? यदि मैं बाद में 'उत्पाद-1-0-0' टैग के आधार पर उत्पाद की जांच करता हूं, तो क्या लाइब्रेरी का सही संशोधन इसके साथ चेक आउट हो जाता है?

उत्तर

6

आपको svn:externals के साथ क्या देखना है, यह है कि यदि आप ट्रंक के अलावा कुछ और चाहते हैं तो आपको संशोधन को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है। विवरण के लिए Google "pinning svn:externals"। यदि आप एक काफी आधुनिक संस्करण, 1.5 या नए आईआईआरसी का उपयोग कर रहे हैं, तो रिश्तेदार बाहरी कम से कम समर्थित हैं। पुराने संस्करण, जैसे कि मैं वर्तमान में उपयोग कर रहा हूं, हमें svn:externalsपर के लिए संपत्ति पर -rNNNNN विकल्प का उपयोग करके संशोधन को स्पष्ट रूप से पिन करने की आवश्यकता है।

हम हमारी सभी शाखाओं और टैगिंग करने के लिए tigris.org से svncopy.pl नामक एक पर्ल स्क्रिप्ट का एक संशोधन का उपयोग कर समाप्त हो गए। यह बुरा नहीं है, लेकिन मेरी इच्छा है कि हम जानते थे कि इससे पहले कि हम उन्हें इतनी भारी इस्तेमाल करने का फैसला कर चुके थे, हम कितना काम कर रहे थे।

+0

svn के लिए: बाहरी, आपको लगभग हमेशा अपने revs peg करना चाहिए। अन्यथा यदि आप बाहरी संदर्भित चीज़ में कुछ बदलते हैं, तो आप अपनी परियोजना को अपने पूर्व राज्य में वापस नहीं ला सकते हैं। इसके अलावा, आप इसे जानने के बिना सामान तोड़ने का जोखिम लेते हैं। Http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-externals.html देखें, "स्पष्ट संशोधन संख्या का उपयोग करें"। –

5

आप अपडेट करते समय संबंधित संशोधन प्राप्त करने के लिए date specifiers का उपयोग कर सकते हैं।

हमने इसे एक उपकरण के लिए किया है जो पीसी-लिंट चलाता है; हम इसे प्रत्येक संशोधन पर चलाने के लिए पसंद करते हैं ताकि हम परिणामों को अलग कर सकें।

यह इसके कार्यान्वयन में थोड़ा अप्रिय है - हम:

  • निर्धारित फिरना काम कर प्रतिलिपि पर किया जाता है (svnversion का प्रयोग करके)
  • निर्धारित फिरना सिर पर है
  • (svn info का प्रयोग करके) सभी संशोधनों के लिए टाइमस्टैम्प को पकड़ें और सिर सहित (svn log का उपयोग करके)
  • "99" सेकेंड द्वारा टाइमस्टैम्प को "निश्चित" होने के लिए टक्कर दें, हमें rev (yay magic!)
  • प्रत्येक संशोधन (कार्य प्रतिलिपि, diff, mailout, ट्रिगर Klaxons पर svn update -r {sometimestamp})
  • रन पीसी-एक प्रकार का वृक्ष का उपयोग कर के लिए अद्यतन, जो कुछ भी

(जटिलता Rube गोल्डवर्ग के योग्य, है ना? किसी भी व्यक्ति के लिए उपरोक्त कृतज्ञता और अपमानजनक कृतज्ञता जो बेहतर समाधान का सुझाव दे सकती है।)

आप Peg and Operative Revisions पर svn पुस्तक के अनुभाग में रुचि भी ले सकते हैं, जिसे मैंने अभी खोजा है - यह अपेक्षाकृत नया जोड़ा प्रतीत होता है।

1

हां, यह मानते हुए कि आप अपने बाहरी हिस्सों में एक स्पष्ट संशोधन संख्या प्रदान करते हैं, जैसा कि docs में सुझाया गया है। अन्यथा यह संदर्भित बाहरीों के HEAD संशोधन का उपयोग करेगा।

बस फ़ाइल आधारित svn के लिए देखें: 1.6 में बाहरी। वे बहुत उपयोगी हैं, लेकिन मैं सिर्फ this bug आज :(

2

आप निर्भरता प्रबंधकों पर पढ़ना चाहिए मारा -। मुझे यकीन है कि क्या अपने मंच है, लेकिन आइवी लता और Maven एक अधिक स्वच्छ तरीके से इस समस्या का समाधान नहीं कर रहा हूँ

SVN: बाहरी तोड़फोड़ में versioned नहीं कर रहे हैं कोई संशोधन या अपने बाहरी में से एक के टैग को परिवर्तित करता है आप जानते हुए भी कि यह क्या परिवर्तन करने से पहले था का कोई तरीका नहीं

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