बहु-घटक परियोजना को संस्करण देने का सबसे अच्छा तरीका क्या है


10

मेरा एक कार्यक्रम है जो 5 प्रमुख घटकों से बना है। मुझे लगता है कि मानक संस्करण की संख्या बहुत सीमित है क्योंकि मैं देखना चाहता हूं कि प्रत्येक घटक किस संस्करण में है।

क्या किसी ने अलग से सूची के अलावा यह करने का एक आसान तरीका पाया है?


1
क्या सभी घटक एक ही समय में निर्मित होते हैं? क्या वे एक ही समय में "रिलीज़" होते हैं?
एडम लेअर

1
@ एना लीयर: नहीं, घटक अलग-अलग समय पर बनाए और जारी किए जाते हैं।
जॉन स्मिथ

यदि वे स्वतंत्र रूप से जारी किए जाते हैं तो मैं उन्हें अलग-अलग उत्पादों के रूप में मानूंगा, प्रत्येक अपने स्वयं के 'विकास' संस्करण संख्या के साथ। यदि संयोजन को एकल उत्पाद के रूप में भी बेचा / जारी किया जाता है, जिसका 'व्यावसायिक' संस्करण हो सकता है।
Kwebble

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

जवाबों:


7

हमारे पास हमारे उत्पाद के साथ यह सटीक समस्या है, और हमने प्रत्येक घटक के लिए अलग-अलग संस्करण संख्याओं को करने का निर्णय लिया और उत्पाद संस्करण केवल एक विपणन संस्करण है जो एक विशिष्ट संशोधन पर विभिन्न घटकों से बना है।


2
आपके संस्करण नियंत्रण प्रणाली में ऐसा क्या दिखेगा? जब आप कोई बड़ी रिलीज़ करते हैं तो क्या आप सभी सब-प्रोजेक्ट्स को "पिन" करते हैं?
रॉबर्ट हार्वे

जब हम एक प्रमुख रिलीज की तैयारी कर रहे होते हैं तो सभी घटकों की समीक्षा की जाती है और यदि उनमें परिवर्तन होता है तो उन्हें उस समय एक अद्यतन संस्करण प्राप्त होता है। संस्करण को भट्ठा में टैग किया गया है।
डेव नी

3

हमारे पास "सिस्टम रिलीज़ संस्करण" है, जो एक मानक संस्करण संख्या है जो घटकों के एक विशेष कॉन्फ़िगरेशन का वर्णन करता है, फिर एक अलग फ़ाइल उस विशेष सिस्टम रिलीज़ के लिए अलग-अलग घटक संस्करणों को सूचीबद्ध करती है। ग्राहक 5.2.1 कहते हैं, लेकिन यदि आवश्यक हो तो हम व्यक्तिगत निर्माण को देख सकते हैं। आमतौर पर एक प्रमुख रिलीज के लिए हम सभी अलग-अलग संस्करणों को सिंक करते हैं ताकि सब कुछ उसी शाखा संख्या से फिर से निर्मित हो जाए।


1
यह वही था जो मैं सोच रहा था, लेकिन आप इसे CI / CD वातावरण में कैसे प्रबंधित करते हैं? उस दस्तावेज को रखना एक वास्तविक PITA की तरह लगता है
Sinaesthetic

1

संस्करणकरण एक समस्या है जो घटक-आधारित अनुप्रयोग विकास से अलग है। या तो आप प्रत्येक घटक को संस्करणित करना चाहते हैं, या आप संपूर्ण अनुप्रयोग का संस्करण बनाना चाहते हैं।

Microsoft से संस्करण के लिए एक अच्छी तरह से जाना जाता पैटर्न है :

major version.minor version.build number.revision

उदाहरण के लिए, आप .NET प्लेटफ़ॉर्म में DL.3 फ़ाइलों को 2.0.3600.1 जैसे संस्करणों या कुछ इस तरह से देख सकते हैं।

इसलिए, मेरा सुझाव है कि आप पहले यह निर्धारित करें कि आप पूरे सिस्टम या इसके घटकों को संस्करण बनाना चाहते हैं या नहीं। यदि आप पूरी प्रणाली को संस्करण बनाना चाहते हैं, तो प्रत्येक एकीकरण के बाद, पूरी परियोजना का निर्माण करें, और बिल्ड संख्या भाग को बढ़ाएं । यदि नहीं, तो बस निर्माण पर प्रत्येक घटक का संस्करण।


मैं आपकी बिल्ड नंबर रणनीति से सहमत नहीं हूं। बिल्ड नंबर आमतौर पर हर बार जब आप किसी दिए गए घटक के लिए प्रोजेक्ट का निर्माण करते हैं, तो वह काम नहीं करता है।
रॉबर्ट हार्वे

@ रॉबर्ट, हाँ, बिल्ड नंबर जल्द ही एक महान संख्या बन जाता है। इसलिए कुछ अन्य प्रणालियों में यह शामिल नहीं है। आप जाने केलिए स्वतंत्र है। लेकिन, प्रमुख संस्करण और मामूली संस्करण दोनों लगभग किसी भी संस्करण प्रणाली में बाहर निकलते हैं।
सईद नेमाटी

इस तरह का संस्करण संगतता के लिए है और वास्तव में समस्या का जवाब नहीं देता है।
सिनास्टेटिक

1

संस्करण के साथ सावधान रहें, यह आपको मार सकता है :-) चीजों को बहुत जटिल बनाने की कोशिश न करें।

मुझे लगता है कि निम्नलिखित दृष्टिकोण आपकी मदद कर सकते हैं:

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

यदि आप केवल स्थानीय रूप से चाहते हैं, तो एक छोटी स्क्रिप्ट लिखें जो प्रत्येक घटक के संस्करण को उस स्थान से एकत्रित करेगी जहां कोड में संग्रहीत किया गया है।

यदि आप इसे और भी कट्टर बनाना चाहते हैं, तो एक बार टैगिंग करने के बाद आप प्रत्येक घटक से संबंधित फाइलों को देख सकते हैं, यह देखते हुए कि आप उन फ़ाइलों की पहचान कर सकते हैं जो एक विशिष्ट घटक से संबंधित हैं। यदि कोई बदला गया है, तो उस विशिष्ट घटक के लिए संस्करण बढ़ाएँ। वैकल्पिक रूप से ऐसा करना है। एक अन्य विकल्प संस्करण ट्रैकिंग के साथ शाखाकरण और विलय का एक संयोजन है।


1

अधिकांश संस्करण संख्याएं विपणन द्वारा संचालित एक प्रमुख और मामूली संशोधन का उपयोग करती हैं, इसलिए आप व्यक्तिगत घटक संस्करणों को ट्रैक करने के लिए उन का उपयोग नहीं कर सकते हैं। संक्षेप में, आपको उस संस्करण के कुछ अन्य भाग को खोजने की आवश्यकता है जिसे आप व्यक्तिगत घटकों के ट्रैकिंग संस्करणों के लिए उपयोग कर सकते हैं, और पूरे पैकेज को ट्रैक करने के लिए प्रमुख और मामूली संस्करण संख्या को आरक्षित कर सकते हैं।

यदि आप Microsoft पैटर्न के लिए कुछ का अनुसरण कर रहे हैं:

major-version.minor-version.build-number.revision

आप प्रत्येक अलग-अलग घटक के संस्करण को ट्रैक करने के लिए .revision का उपयोग कर सकते हैं, और सामान्य तरीके से पूर्ण उत्पाद परिवर्तन को ट्रैक करने के लिए मामूली और प्रमुख संशोधन संख्याओं का उपयोग कर सकते हैं।

यदि आप इसके समान एक पैटर्न का अनुसरण कर रहे हैं:

Major-Version.Minor-Version.Build-Number

आपको व्यक्तिगत घटक संस्करणों को ट्रैक करने के लिए बिल्ड नंबर का उपयोग करना होगा।


0

संपूर्ण पुस्तकें संस्करण सॉफ़्टवेयर के बारे में लिखी जाती हैं।

यहां एक दृष्टिकोण है जो मैं उपयोग करता हूं।

प्रत्येक भाग के रूप में एक संस्करण है:

major.minor.developmental

इनमें से प्रत्येक एक संख्या है, जो 0 से शुरू होती है।

एक औपचारिक रिलीज (ग्राहकों के लिए) के लिए, विकासात्मक हिस्सा हमेशा पॉलिसी के मामले के रूप में 0 होना चाहिए।

विपणन निर्णय द्वारा मेजर को वेतन वृद्धि दी जाती है।

माइनर को फीचर सेट द्वारा जारी किया जाता है - बाजार में।

उदाहरण:

  • मैं एक नए घटक पर विकास शुरू करता हूं, इसलिए मेरा संस्करण संख्या 0.0.1 होगा। जैसा कि मैंने अपने डेस्क को अपने सहयोगियों के लिए जारी किया, उदाहरण के लिए, आंतरिक परीक्षण के लिए, विकास संख्या 0.0.2, 0.0.3, और इसी तरह आगे बढ़ती है।

  • मैं इस नई चीज को बाजार में 1.0.0 के रूप में जारी करता हूं, जहां विकास के अंत से रिलीज तक केवल अनुमत परिवर्तन संस्करण संख्या (जैसे 0.0.43 -> 1.0.0) को बदलना था।

  • कुछ नई सुविधाएँ जोड़ी जानी हैं। मैं इन विशेषताओं को जोड़ते हुए 1.0.0 बेसलाइन पर काम शुरू करता हूं, इसलिए मैं अपने सहयोगियों को परीक्षण के लिए जो संस्करण जारी करता हूं वह 1.0.1, 1.0.2 और इसी तरह हैं।

  • अगली विशेषताओं को 1.1.0 के रूप में बाजार में जारी किया गया है।

  • मार्केटिंग तय करती है कि अगली बड़ी चीज वास्तव में बड़ी होगी, इसलिए यह 2.0.0 के रूप में बाहर जाएगी। मैं 1.1.1 के माध्यम से प्रगति करते हुए 1.1.1 पर काम शुरू करता हूं, और 2.0.0 के रूप में रिलीज करता हूं।

और इसलिए चक्र दोहराता है।

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

विकास का प्रबंधन करने के लिए अपने स्रोत (और ऑब्जेक्ट) संशोधन प्रबंधन प्रणाली में आंतरिक, शाखाओं और टैग (लेबल, दिन की आपकी शब्दावली जो भी हो) का उपयोग करें।

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

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


तो क्या आप मूल रूप से कह रहे हैं कि अलग-अलग घटकों के संस्करण के लिए आप तीसरे नंबर को बढ़ाते हैं, और पूरी प्रणाली के संस्करण के लिए आप हर घटक के लिए पहली या दूसरी संख्या बढ़ाते हैं?
रॉबर्ट हार्वे

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

दिलचस्प यह है कि समस्या को यह बताए बिना कि यह समस्या कैसे है, या कुछ बेहतर करने का सुझाव देता है।
जल्दी_अगले

0

सारांश

मेरे लिए, संस्करण सॉफ़्टवेयर का एकमात्र विश्वसनीय तरीका अपने संस्करण नियंत्रण प्रणाली से हैश या बदलाव पहचानकर्ता का उपयोग करना है।

एक समग्र बिल्ड संस्करण संख्या उपयोगी हो सकती है, लेकिन यह वास्तव में केवल विशिष्ट होने की गारंटी है यदि आपके पास बिल्ड सर्वर और / या आप प्रत्येक रिलीज़ पर हस्ताक्षर करते हैं। हालांकि हम में से कई के लिए, यह बस व्यवहार्य नहीं है।

यदि आपकी परियोजना कई संस्करण नियंत्रण रिपॉजिटरी पर विभाजित है, तो आपको एक ऐसे तंत्र का निर्माण करने की आवश्यकता होगी जिससे आपका उपयोगकर्ता इंटरफ़ेस प्रत्येक निर्भर रिपॉजिटरी को क्वेरी कर सके और रिपोर्ट उपयोगकर्ता के पास वापस आ सके।

व्यक्तिगत अनुभव से उदाहरण

पिछले नियोक्ता के एक प्रोजेक्ट में, जहां हमारे पास हमारे (आंतरिक) ग्राहक सॉफ्टवेयर को संशोधित करने और इसे पुन: स्थापित करने में समस्या थी, मैंने एक प्रक्रिया शुरू की जिसके द्वारा प्रत्येक एप्लिकेशन और लाइब्रेरी में मर्क्यूरियल हैश को संकलित किया गया। जब भी सॉफ्टवेयर शुरू किया गया था, सभी सॉफ्टवेयर घटकों को क्वेरी करके एक संशोधन स्ट्रिंग बनाया गया था।

यह संशोधन स्ट्रिंग तब प्रदर्शित किया गया था जब आप लगभग पेज पर गए थे और हर बार आवेदन शुरू होने के बाद लॉग फाइल को लिखा गया था। यह फॉर्म का था:

Application name     (6a72e7c61f54)
    Library1         (b672a13a41e1)
        Library2     (9cc35769b23a)
    Library2         (9cc35769b23a)
    Library3         (4e9f56a0186a+)
        Library2     (9cc35769b23a)
    Library4         (2e3b08c4ac76)
        Library1     (b672a13a41e1)
            Library2 (9cc35769b23a)

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

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

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

नोट: यह प्रणाली केवल तभी व्यवहार्य है जब आप एक संशोधन नियंत्रण प्रणाली का उपयोग करते हैं जहाँ किसी दिए गए हैश को आपके कार्य निर्देशिका में फ़ाइलों के एक ही सेट के परिणाम की गारंटी दी जाती है (उदाहरण git और व्यापारिक) यदि किसी दिए गए कार्य निर्देशिका में फ़ाइलों का मिश्रण हो सकता है और कई संशोधन (जैसे svn) से निर्देशिका तब सभी दांव काम कर रहे निर्देशिका की स्थिति के बारे में बंद हैं और यह विधि बिल्कुल भी काम नहीं करेगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.