जब एक प्रतिबद्ध संस्करण का टैग नहीं होना चाहिए?


30

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

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


23
है हर एक स्थिर, परीक्षण, गुणवत्ता आश्वासन अपनी परियोजना में रिलीज में महारत हासिल करने के लिए प्रतिबद्ध?
एलेक्स रिंकिंग

1
@AlexReinking हर कमिटमेंट का परीक्षण किया जाता है, लेकिन मैं सिर्फ अपनी निजी परियोजनाओं के साथ आम प्रथाओं के आदी होने की कोशिश कर रहा हूं, इसलिए यह सिर्फ मुझे काम कर रहा है और जैसे कि वास्तव में "परिवर्तन करने के अलावा, एक प्रणाली नहीं है" यह स्वयं, इसे प्रतिबद्ध करें ”।
वोर्टिक्सडेव

यह भी ध्यान दें कि टैग बाद में बदले जा सकते हैं। एकमात्र रॉक सॉलिड कमिट आइडेंटिफायर कमिट हैश की है।
थोरबजोरन रावन एंडरसन

9
गुरु के लिए हर कमिट ??? आपको कभी भी गुरु के लिए प्रतिबद्ध नहीं होना चाहिए। मास्टर में हर मर्ज बहुत बेहतर लगता है।
ज्येष्ठ

2
मुझे लगता है कि @ धोखेबाज सिर पर कील ठोकता है। मास्टर पर समाप्त होने वाली प्रत्येक प्रतिबद्धता को एक संस्करण के साथ टैग किया जाना चाहिए क्योंकि मास्टर पर हर कमिट को विकास से एक रिलीज मर्ज होना चाहिए
बीजे मायर्स

जवाबों:


71

सेमर वीवर्स वर्जन रिलीज करता है , कमिट नहीं करता । यदि आपके संस्करण नियंत्रण मॉडल की आवश्यकता होती है कि मास्टर करने के लिए प्रत्येक कमिट एक रिलीज हो, तो हां, हर कमिट को परिवर्तन की डिग्री के अनुसार टैग करने की आवश्यकता होगी।

आम तौर पर, हालांकि, परियोजनाएं मास्टर पर ज्यादातर स्थिर उत्पाद विकसित करती हैं और उन रिलीज को टैग करती हैं जो वे समर्थन के योग्य हैं। जब वे ऐसा करते हैं, तो वे अपनी संस्करण योजना के अनुसार टैग करेंगे, जो विशेष रूप से सेमी वीयर होना जरूरी नहीं है।


5
SemVer ज्यादातर केवल पुस्तकालयों के लिए समझ में आता है जहाँ उपयोगकर्ता कोड के अन्य बिट्स हैं और मनुष्य नहीं। अधिकांश उपयोगकर्ता सामना करने वाले ऐप्स में वास्तव में कोई "ब्रेकिंग" परिवर्तन नहीं होता है क्योंकि उपयोगकर्ता स्वचालित रूप से नए संस्करण के लिए अनुकूल हो सकता है।
क्वर्टी मार्ट

5
मैं तर्क दूंगा कि एप्स का सामना करने वाले उपयोगकर्ता के कमांड लाइन संस्करण को शब्दार्थ रूप से संस्करणित किया जाना चाहिए क्योंकि उनके झंडे और आउटपुट स्वरूप अलग-अलग व्यवहार कर सकते हैं। एक ग्रे क्षेत्र के बिट।
एलेक्स रिंकिंग

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

11
@Qwertie - वापस अपग्रेड करना। कितने लोग अभी भी विंडोज और ऑफिस के पुराने प्रमुख संस्करणों को चलाते हैं?
एलेक्स रिंकिंग

5
@Qwertie उन्हें परिवर्तन लॉग या प्रलेखन को ध्यान से पढ़ने के लिए प्रेरित किया जा सकता है ताकि वे उस तरीके को अनुकूलित कर सकें जो वे सिस्टम का उपयोग नई या संशोधित सुविधाओं का उपयोग करने के लिए करते हैं, या हटाए गए किसी विशेषता के लिए वर्कअराउंड ढूंढते हैं। यह एक ही मामला है, सॉफ्टवेयर के उनके उपयोग को बदलने की जरूरत है क्योंकि सॉफ्टवेयर बदल गया है, इसलिए आपको उन्हें स्पष्ट रूप से उस बदलाव के बारे में बताना चाहिए।
आयरन ग्रेमलिन

11

संस्करण संख्या को रिलीज़ के लिए आवंटित किया गया है। सामान्य तौर पर हर कमिट में रिलीज नहीं होना चाहिए। इसके अनेक कारण हैं।

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

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

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

तीसरा यह व्यापक रूप से उपयोग में संस्करणों की संख्या को कम रखने में सहायक है। यहां तक ​​कि एक स्थिर शाखा पर अक्सर कई सुधारों को एक साथ इकट्ठा करना और हर फिक्स के लिए एक रिलीज करने की तुलना में एक ही रिलीज करना बेहतर होता है।


2

कहने के लिए स्पष्ट लगता है, लेकिन: एक संस्करण संख्या उद्देश्य आपको आसानी से यह निर्धारित करने देता है कि सॉफ्टवेयर का कौन सा संस्करण चल रहा है।

यदि किसी के पास कोड के किसी विशेष पुनरावृत्ति तक पहुंचने का कोई मौका है, और अन्यथा आसानी से एक विशिष्ट पहचानकर्ता को निर्धारित करने में सक्षम नहीं है, तो उस पुनरावृत्ति में एक विशिष्ट संस्करण संख्या होनी चाहिए। मैं इसे 'पहले नियम' के रूप में देखता हूं। परिणाम के रूप में, अलग-अलग रिलीज़ स्पष्ट रूप से अलग संस्करण संख्याएँ चाहेंगे।

हालाँकि, अधिक खेल में आता है:

यह सुनिश्चित करने का एक तरीका है कि प्रत्येक प्रतिबद्ध के साथ संस्करण संख्याओं को टकराया जाए लेकिन यह आमतौर पर एक अच्छा विचार नहीं है। काम में अपेक्षाकृत कम बदलाव लाने के लिए कई कमियाँ / पुनरावृत्तियाँ हो सकती हैं, और संस्करण 0.0.1 -> 0.0.2 को देखने के लिए बाहरी दुनिया को भ्रमित करना बड़ी संख्या में संचित परिवर्तनों के परिणामस्वरूप फिर 0.0.2 -> 0.0 .56 क्योंकि किसी ने श्वेत स्थान पर एक समय में एक फ़ाइल को ठीक किया और कुछ भी कार्यात्मक नहीं बदला।

"प्रत्येक संस्करण के लिए एक पूर्ण संस्करण" से "प्रत्येक संस्करण के लिए एक संस्करण" तक की सड़क कितनी नीचे है: वास्तव में आप, अन्य उपयोगकर्ताओं और अंतराल को भरने के लिए आप किन प्रणालियों का उपयोग करने के लिए तैयार हैं।

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


0

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

यदि यह एक नया संस्करण नहीं होना चाहिए (कम से कम एक पैच), तो इसकी संभावना मास्टर में विलय नहीं होनी चाहिए क्योंकि सुविधा / फिक्स / आदि पूर्ण नहीं है।

हालाँकि, आपकी टीम के वर्कफ़्लो पर निर्भर करता है कि आप अभी भी एक संस्करण के बिना कई कमिट के साथ मास्टर कर सकते हैं। यदि एक पुल अनुरोध में कई कमिट हैं जो स्क्वैश नहीं करते हैं (वे मेरी राय में नहीं होना चाहिए), तो आप अभी भी 10 कमिट और सिर्फ 1 नए संस्करण के साथ समाप्त हो सकते हैं।

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