जटिल एंटरप्राइज़ प्लेटफ़ॉर्म स्तर की निर्भरता प्रबंधन और रिलीज़ संस्करण के साथ अपने अनुभव के आधार पर मैं एक दृष्टिकोण की सिफारिश करने के लिए आया हूं, जिसे मैं सेमी-सेमी वर्जनिंग कहना चाहता हूं ।
मूल रूप से यह सेमेटिक वर्जनिंग 2.0 से दूर है, लेकिन यह उतना सख्त नहीं है।
अर्ध-शब्दार्थ संस्करण खंड:
<primary.release.segment>[-<pre.release.segment>][+<post.release.segment>]
प्राथमिक रिलीज़ सेगमेंट प्रारूप:
MARKETTING.MAJOR.MINOR.PATCH
प्रत्येक सेगमेंट में अल्फ़ान्यूमेरिक्स की अनुमति होनी चाहिए, लेकिन तार्किक वृद्धिशील परिवर्तनों के लिए शुद्ध न्यूमेरिक्स की सिफारिश की जाती है।
SemVer की तरह, मैं मेजर, माइनर, और पैच कंपोनेंट्स को रिवर्स कम्पैटिबिलिटी टियर्स का प्रतिनिधित्व करने के लिए सलाह देता हूं, लेकिन मैं मार्केटिंग कंपोनेंट को तैयार करने की भी सलाह देता हूं । यह उत्पाद मालिकों, सुविधा महाकाव्यों / समूहों, और व्यावसायिक चिंताओं को तकनीकी संगतता चिंताओं से स्वतंत्र प्राथमिक घटक को टक्कर देने की अनुमति देता है।
अन्य उत्तरों के विपरीत, मैंने प्राथमिक सेगमेंट में बिल्ड नंबर को जोड़ने की सिफारिश नहीं की है। इसके बजाय, '+' के बाद एक पोस्ट-रिलीज़ सेगमेंट जोड़ें (उदा: 1.1.0.0 + build.42)। SemVer इस बिल्ड मेटाडेटा को कॉल करता है, लेकिन मुझे लगता है कि पोस्ट-रिलीज़ सेगमेंट स्पष्ट है। यह सेगमेंट प्राथमिक डेटा सेगमेंट में अनुकूलता जानकारी से संबंधित नहीं होने के कारण प्रत्यय डेटा घोषित करने के लिए बहुत अच्छा है। आपका निरंतर एकीकरण बनाता है फिर पिछले रिलीज नंबर को एक वृद्धिशील बिल्ड नंबर के साथ जोड़ा जा सकता है जो प्रत्येक प्राथमिक रिलीज के बाद रीसेट करता है (उदा: 1.1.0.0 -> 1.1.0.0 + build.1 -> 1.1.0.0 + build.2 -> १.१.०.१)। कुछ लोग बारी-बारी से यहाँ svn revision नंबर डालना चाहते हैं या git कमिट श को कोड रिपॉजिटरी में बाँधना आसान बनाते हैं। एक अन्य विकल्प यह है कि हॉटफ़िक्स और पैच के लिए रिलीज़-बाद के सेगमेंट का उपयोग किया जाए, इसके लिए एक नया प्राथमिक रिलीज़ कंपोनेंट जोड़ने पर विचार किया जा सकता है। पैच घटक बढ़ने पर इसे हमेशा गिराया जा सकता है, क्योंकि संस्करण प्रभावी रूप से बाएं-संरेखित और क्रमबद्ध हैं।
रिलीज़ और पोस्ट-रिलीज़ सेगमेंट के अलावा, लोग अक्सर अल्फ़ा, बेटास और रिलीज़ उम्मीदवारों जैसे लगभग-स्थिर प्री-रिलीज़ को इंगित करने के लिए प्री-रिलीज़ सेगमेंट का उपयोग करना चाहते हैं । इस के लिए SemVer दृष्टिकोण अच्छी तरह से काम करता है, लेकिन मैं अल्फा-न्यूमेरिक क्लासिफायर से संख्यात्मक घटकों को अलग करने की सलाह देता हूं (उदा: 1.2.0.0 + Alpha.2 या 1.2.0.0 + RC.2)। आम तौर पर आप रिलीज़ सेगमेंट को एक ही समय में रिलीज़ करने के बाद रिलीज़ सेगमेंट में जोड़ देंगे और फिर प्री-रिलीज़ सेगमेंट को छोड़ देंगे जब आप अगली बार उन्हें प्राइमरी रिलीज़ सेगमेंट से बाहर कर देंगे (उदा: 1.0.1.2 -> 1.2.0.0-RC.1 - > 1.2.0.0)। प्री-रिलीज़ सेगमेंट को यह इंगित करने के लिए जोड़ा जाता है कि रिलीज़ संस्करण सामने आ रहा है, आमतौर पर अधिक गहराई से परीक्षण और साझा करने के लिए सुविधाओं का एक निश्चित सेट जो अधिक मिनटों के आधार पर मिनट टू मिनट नहीं बदलता है।
लगभग सभी उपयोग-मामलों को कवर करने वाले इस तरह से सभी को परिभाषित करने की सुंदरता यह है कि आप उन्हें एक मानक तरीके से पार्स, सॉर्ट, तुलना और बढ़ा सकते हैं। यह विशेष रूप से महत्वपूर्ण है जब अपने स्वयं के प्रबंधित निर्भरता वाले प्रत्येक छोटे स्वतंत्र रूप से संस्करण वाले घटकों (जैसे सूक्ष्म सेवाओं) के साथ जटिल अनुप्रयोगों के लिए सीआई सिस्टम का उपयोग किया जाता है।
यदि आप रुचि रखते हैं, तो मैंने माणिक में अर्ध-अर्धवृत्त पार्सर लिखा । मुझे न केवल इस पैटर्न का उपयोग करने की आवश्यकता थी, बल्कि इसका उपयोग करने वाले अन्य एप्लिकेशन को प्रबंधित करने में सक्षम होना चाहिए।