2008-10-12 18 views
9

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

मेरे पास कुछ टूल्स हैं जिन्हें मुझे अद्यतन करने और हर सर्वर पर कुछ सर्वरों पर तैनात करना है। स्रोत एक एसवीएन भंडार में प्रबंधित किया जाता है।

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

चूंकि मैं स्रोत पर काम करते समय हर बार बाइनरी को अपडेट/प्रतिबद्ध नहीं करना चाहता, इसलिए मैं अपनी परियोजना के सबफ़ोल्डर के रूप में द्विआधारी के लिए फ़ोल्डर नहीं बनाऊंगा। बाइनरी को प्रतिबद्ध करना (और चाहिए) एक अलग, सचेत कार्य होगा।

--- trunk 
    --- project1 
    --- project2 
--- built 
    --- project1 
    --- project2 

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

--- tags/project1/release2/ 
     includes files from 
--- trunk/project1/ revision 487 and 
--- built/project1/ revision 488 

क्या मैं संभव के बाद क्या कर रहा हूं, और मैं इसे कैसे प्राप्त करूं? क्या मुझे इसके बजाय इस समस्या को हल करने के किसी अन्य तरीके को देखना चाहिए?

+0

[एसवीएन और बाइनरीज़] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/191533/svn-and-binaries) –

उत्तर

9

आपके सेटअप के बारे में अजीब कुछ भी नहीं है (मैं सटीक बिट्स को संरक्षित करने की आवश्यकता होने पर दोनों बिल्ड टूल्स के साथ समान चीजें कर रहा हूं और कलाकृतियों का निर्माण कर रहा हूं।) जो लेआउट आप चाहते हैं वह निश्चित रूप से संभव है - आपके टैग/प्रोजेक्ट 1/रिलीज़ 2 में अन्य शाखाओं या टैग के विशिष्ट संस्करणों को "शामिल" करने के लिए, आपको केवल svn:externals properties टैग/प्रोजेक्ट 1/रिलीज़ 2 पर स्रोतों और संशोधन के यूआरएल का संदर्भ देने की आवश्यकता है आप खींचना चाहते हैं, और आप सेट हैं।

0

सुनिश्चित नहीं है कि आप ट्रंक/प्रोजेक्ट 1/बाइनरी पेड़ के नीचे द्विआधारी क्यों नहीं रखना चाहते हैं? जैसा कि कहा गया है, कुछ भी आप इस तरह के पेड़ नज़र होने से बंद कर देना चाहिए:

  • ट्रंक
    • Project1
    • Project2
  • बनाया
    • Project1
    • Project2
  • टैग
    • Project1
    • <tag id>
      • <code as usual>
      • बाइनरी
2

मुझे विश्वास है कि यह "बाहरी" के उपयोग से संभाला जाता है। हालांकि, नुकसान हैं, और मुझे अभी तक ऐसा कुछ नहीं मिला है जिसे मैं सहज महसूस करता हूं। मैं आपके स्रोत पुस्तकालयों के साथ सुझाव देता हूं, लेकिन मैं इसे मैन्युअल रूप से करता हूं।

4

जबकि मैं सीधे आपके प्रश्न का उत्तर नहीं दे सकता, मैं एक वैकल्पिक दृष्टिकोण के बारे में बताउंगा।

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

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

0

तकनीकी रूप से वह दृष्टिकोण ठीक काम करेगा, मैं व्यक्तिगत रूप से इस तरह की बाइनरी स्टोर करने के लिए एसवीएन का उपयोग नहीं करता।

मेरे पास 2 कारण हैं कि ऐसा क्यों है। प्रारंभ में मैंने सोचा था कि एसवीएन सीवीएस के बाद पीछा किया और बाइनरी diffs स्टोर नहीं किया, जो यह पता चला कि मैं गलत था। किसी भी दर पर:

0) "तकनीकी रूप से" आपको जेनरेट की गई फाइलों को स्टोर करने की आवश्यकता नहीं है क्योंकि उन्हें निष्क्रिय होने पर फिर से बनाया जा सकता है। जाहिर है यह वास्तविक जीवन में व्यावहारिक नहीं है, लेकिन आईएमएचओ आपको अभी भी सोचना चाहिए कि 'जेनरेट की गई चीज़ों के लिए मैं कैश कैसे बना सकता हूं।'
एसवीएन वास्तव में उस उपयोग मॉडल में फिट नहीं है। यह वास्तव में अपने आप पर एक बिंदु नहीं है, लेकिन जो मैं व्यक्त करने की कोशिश कर रहा हूं वह है "एसवीएन में कुछ डालने का मतलब है कि आप इसके बारे में परवाह करते हैं और इसे संग्रहित करना चाहते हैं" - यदि आप नहीं करते हैं, तो आपको IMHO इसे संदेश नहीं देना चाहिए संदेश, निहित या अन्यथा

1) यह कष्टप्रद है। अगर कोई आपके रेपो के शीर्ष को चेक आउट करता है, तो वे सभी बाइनरी भी प्राप्त करेंगे। यदि आपके पास दो या दो से अधिक है, तो यह लोगों को उस सामान के लिए इंतजार करना होगा (और उनकी डिस्क स्पेस का उपयोग करें) किसी भी अच्छे कारण के लिए नहीं। इसे एक अलग भंडार स्थापित करके हल किया जा सकता है, लेकिन एक बार जब आप ऐसा IMHO करते हैं तो आप इसके बजाय एक अलग वेबसर्वर स्थापित कर सकते हैं।

2) एसवीएन आपकी सभी फ़ाइलों को हमेशा के लिए रखने के लिए डिज़ाइन किया गया है। It is very painful and time consuming to completely remove things from the repository, जो उन चीजों को स्टोर करने के लिए संदिग्ध बनाता है जिन्हें आपको स्टोर करने की आवश्यकता नहीं है।

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

** हाँ मुझे पता है कि यह डीएवी का उपयोग करता है और इसलिए यह वास्तव में केवल एक सादा पुराना वेबसर्वर नहीं है, लेकिन उत्पादन मशीन पर तैनाती के दृष्टिकोण से, प्रक्रिया है 'मैं http://blah से http का उपयोग करके कुछ फाइलें डाउनलोड करता हूं' तो यह भी एक हो सकता है।

+1

@ ओरियन एडवर्ड्स: कृपया सुनिश्चित करें कि अगली बार पोस्ट करने से पहले आप अपने तथ्यों को दोबारा जांच लें; से: http://subversion.tigris.org/faq.html#binary-files "सबवर्जन एक भिन्न विधि का उपयोग करता है जो बाइनरी और टेक्स्ट फ़ाइलों पर समान रूप से अच्छी तरह से काम करता है" – Miquella

+0

मिक्केला की तरह इंगित किया गया, एसवीएन बाइनरी diffs को बहुत अच्छी तरह से संभालता है।जैसा कि आप सोचेंगे, संस्करण संस्करणों द्वारा लगभग उतनी ही जगह नहीं ली गई है, और आपके लिंकर (वृद्धिशील) के आधार पर वे बहुत अच्छी तरह से भिन्न हो सकते हैं। इसके अलावा, एसवीएन बहुत अधिक "एक वेब सर्वर" नहीं है। आप एसवीएन और डीएवी को भ्रमित कर रहे हैं। –

+0

@ ओरियन एडवर्ड्स: 1) असल में, मेरा मानना ​​है कि यह सच नहीं है। एसवीएन केवल फाइल सामग्री (टेक्स्ट/बाइनरी) 1 बी के बावजूद diffs को स्टोर करता है) यह मेरी संरचना के उप-फ़ोल्डर के रूप में द्विआधारी को संग्रहीत नहीं करने के लिए, जो कि मैंने प्रोजेक्ट के उप-फ़ोल्डर के रूप में संग्रहीत किया है, के लिए यही कारण है, लेकिन अपने स्वयं के, भंडार के अलग क्षेत्र में। इस तरह, आप उन्हें केवल तब प्राप्त करते हैं जब आप वास्तव में उन्हें चाहते हैं। –