svn वर्जन कंट्रोल(वीसीएस या डीवीसीएस) का उपयोग करने के अपने वर्कफ़्लो का वर्णन करें




git mercurial (2)

एक वीसीएस से एक डीवीसीएस (वितरित संस्करण नियंत्रण) के साथ मुख्य अंतर यह है कि यह एक चीज करने के लिए (एक वितरित काम की प्रकृति द्वारा) बनाया जाता है, और एक बात अच्छी तरह से होती है:

विलय

तो आप जिन कार्यों का उल्लेख करते हैं उन्हें उस कोण से देखा जा सकता है।
शाखाएं अभी भी बनाई जाएंगी, लेकिन उनमें से सभी अन्य डेवलपर्स द्वारा दिखाई नहीं देगी। उनमें से बहुत से वास्तव में आपके स्थानीय भंडार नहीं छोड़ेंगे।

एक डीवीसीएस होने के कारण विलय पर दो मुख्य प्रभाव पड़ते हैं:

  1. आप जितनी बार चाहें उतनी बार प्रतिबद्ध करते हैं। जो लोग काम करते हैं वे तुरंत दूसरों के लिए दृश्यमान नहीं होते हैं (यानी "उन्हें अपने कार्यक्षेत्र के अगले अपडेट के तुरंत बाद उन्हें मर्ज करना नहीं होगा")
    ~ प्रकाशन प्रक्रिया एक निष्क्रिय है: आपके धक्का अन्य repos द्वारा अनदेखा किया जा सकता है।
    ~ "खपत" भाग एक सक्रिय है: आप यह जांच सकते हैं कि आपकी शाखा में विलय करने से पहले आपको क्या धकेल दिया गया है, और यह तय करें कि आप क्या विलय करना चाहते हैं और किससे (और न केवल इसलिए कि आप सभी एक ही काम कर रहे हैं डाली")।
  2. यह किसी मर्ज वर्कफ़्लो (आंशिक, क्रिस-क्रॉसिंग, रिकर्सिव, ...) के लिए अच्छी तरह से काम करता है। डीएजी (डायरेक्टेड एसाइक्लिक ग्राफ) अक्सर उन डीवीसीएस (कम से कम गिट और मर्कुरियल) द्वारा इतिहास रिकॉर्ड करने के लिए उपयोग किया जाता है, जो यह ढूंढना आसान बनाता है कि क्या है पहले ही विलय हो गया है और आम पूर्वज को ढूंढ लिया गया है। एसवीएन और इसके डीवीसीएस समकक्षों के बीच यह एक महत्वपूर्ण अंतर है , लेकिन अन्य भी हैं

अभी व:

एक सुविधा लागू करें

जैसा कि मैंने अपने सीवीसीएस (सेंट्रल वीसीएस) के जवाब में विस्तार किया है, "फीचर" शाखा के पीछे की कठिनाई यह है कि कई उप-विशेषताएं अंतःस्थापित हो जाएंगी।
यह वह जगह है जहां डीवीसीएस चमकेंगे क्योंकि वे आपको आंशिक विलय, या उप-फीचर शाखाओं की रचनाओं को सुविधाजनक बनाने के लिए, अपने स्थानीय (जैसे "अभी तक नहीं धकेल गए") इतिहास (मर्कुरियल, SHA1 के लिए परिवर्तन) के पुनर्गठन की अनुमति देंगे।

फिक्सिंग बग

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

को़ड समीक्षा

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

कोड समीक्षा व्यवस्थित करने के लिए एक डीवीसीएस तरीका एक विशेष कोड समीक्षा रेपो में नए बदलावों को धक्का देना है, जो:

  • उनको अस्वीकार कर दें यदि वे आवश्यक गुणवत्ता मानदंडों का उत्तर नहीं देते हैं
  • उनको स्वीकार करें (कोड-समीक्षा रेपो के साथ उन्हें मर्ज करें), और उन्हें एक नए रेपो (उदाहरण के लिए विभिन्न परीक्षणों के लिए उपयोग किया जाता है) पर दबाएं

रिफैक्टरिंग कोड (पोस्ट कोड-समीक्षा)

वे एक शाखा में डेवलपर के स्थानीय रेपो पर किए जाते हैं (क्योंकि इसे वापस मर्ज करना इतना आसान है)

पैच शामिल करें

पिछले खंड की तुलना में वही प्रक्रिया।

अपने ऐप के नए संस्करण को जारी करना (डेस्कटॉप, वेब, मोबाइल, क्या आप उन्हें अलग-अलग इलाज करेंगे?)

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

आपको एक "केंद्रीय" या बल्कि "आधिकारिक" भंडार स्थापित करने की आवश्यकता है जो इस भूमिका निभाएगा:

  • संस्करणों को जारी करने के लिए रेपो
  • नए भंडारों के लिए रेपो योगदान देना चाहता था

तो यह रिलीज प्रयोजनों के लिए, बल्कि नए विकास उद्देश्यों के लिए दोनों की सेवा कर सकता है।

वीसीएस या डीवीडी का उपयोग करते समय मैं अन्य लोगों को वर्कफ़्लो सीखना चाहता हूं।

निम्नलिखित कार्यों को संभालने के लिए कृपया अपनी रणनीति का वर्णन करें:

  • एक सुविधा लागू करें
  • फिक्सिंग बग (विकास और तैनात ऐप के दौरान)
  • को़ड समीक्षा
  • रिफैक्टरिंग कोड (पोस्ट कोड-समीक्षा)
  • पैच शामिल करें
  • अपने ऐप के नए संस्करण को जारी करना (डेस्कटॉप, वेब, मोबाइल, क्या आप उन्हें अलग-अलग इलाज करेंगे?)

अपने उत्तर को व्यवस्थित करने के लिए स्वतंत्र महसूस करें जो कार्यों द्वारा समूहीकृत नहीं है लेकिन जो कुछ भी आपको लगता है उससे समूहीकृत है लेकिन कृपया इसे वीसीएस / डीवीसीएस द्वारा व्यवस्थित करें (कृपया उन्हें मिश्रण न करें)।

धन्यवाद।


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

लेकिन वीसीएस होने के कारण शाखाकरण पर दो प्रमुख प्रभाव पड़ते हैं:

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

अभी व:

एक सुविधा लागू करना

कोई भी वीसीएस शाखा बनाकर ऐसा करेगा, लेकिन मुझे आश्चर्य है कि एक "फीचर" शाखा आसान नहीं है:
* सुविधा बहुत जटिल हो सकती है
* यह अगली रिलीज के लिए समय पर तैयार हो सकता है
* इसका केवल कुछ हिस्सा मुख्य विकास शाखा में वापस विलय करने की आवश्यकता हो सकती है
* यह उन अन्य सुविधाओं पर निर्भर हो सकता है जो अभी तक पूरी तरह से नहीं किए गए हैं

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

फिक्सिंग बग

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

को़ड समीक्षा

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

रिफैक्टरिंग कोड (पोस्ट कोड-समीक्षा)

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

पैच शामिल करें

अंतिम बिंदु के रूप में वही टिप्पणी। यदि पैच एक बड़ा है, तो एक शाखा बनाई जानी चाहिए।

अपने ऐप के नए संस्करण को जारी करना

एक वीसीएस केवल तब तक आपको प्राप्त करेगा जब आपके ऐप को रिलीज़ करने की बात आती है, क्योंकि यह रिलीज प्रबंधन टूल नहीं है।
आपको पहले रिलीज़ होने के लिए एक संस्करण की पहचान करने की आवश्यकता होगी (लेकिन उसके बाद तैनाती प्रक्रिया जिसमें शामिल है:

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

वीसीएस और रिलीज प्रबंधन के साथ महत्वपूर्ण चीजें हैं:

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

रिलीज तंत्र का भी बाइनरी निर्भरताओं पर प्रभाव पड़ता है:

  • बाहरी बाइनरी निर्भरताओं के लिए, आप शायद बाहरी पुस्तकालयों के निश्चित संशोधन प्राप्त करने के लिए मेवेन जैसे तंत्र का उपयोग करेंगे
  • लेकिन आंतरिक निर्भरताओं के लिए, जब आप केवल एक ऐप नहीं विकसित कर रहे हैं लेकिन कई एक दूसरे पर निर्भर करते हैं, तो आपको अन्य ऐप्स (आंतरिक बाइनरी निर्भरता) द्वारा उत्पादित बाइनरी का संदर्भ कैसे देना है, और वे आमतौर पर संग्रहीत नहीं होंगे आपके वीसीएस में (विशेष रूप से विकास चरण में, जहां आप अपने अन्य ऐप्स के उपयोग के लिए सक्षम होने के लिए कई अलग-अलग रिलीज उत्पन्न कर सकते हैं)

आप स्रोत निर्भरताओं में भी शामिल होना चुन सकते हैं (और अन्य आंतरिक परियोजनाओं के सभी स्रोतों को प्राप्त कर सकते हैं जिन्हें आप स्वयं के लिए जरूरी हैं), और इसके लिए एक वीसीएस अच्छी तरह अनुकूल है, लेकिन यह सब कुछ पुनः संयोजित करने के लिए हमेशा संभव / व्यावहारिक नहीं है।







dvcs