वितरित संस्करण नियंत्रण (डिस्ट्रिब्यूटेड वर्जन कंट्रोल)

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

2010 में, सॉफ्टवेयर विकास लेखक जोएल स्पोल्स्की ने वितरित संस्करण नियंत्रण सिस्टम्स को संभवतः विगत दस वर्षों में सॉफ्टवेयर विकास प्रौद्योगिकी में अधिक उच्च प्रगति के रूप में वर्णित किया था।

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

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

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

कुछ मूल रूप से केंद्रीकृत सिस्टम्स अब कुछ वितरित सुविधाएँ प्रदान करती हैं। इस प्रकार टीम फाउंडेशन सर्वर और विजुअल स्टूडियो टीम सर्विसेज अब गिट की होस्ट के माध्यम से केंद्रीकृत और वितरित संस्करण नियंत्रण रिपॉजिटरी की होस्ट करते हैं।

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

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

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

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

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

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

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

इतिहास
पहले ओपन-सोर्स डीवीसीएस सिस्टम में जीएनयू आर्क, मोनोटोन (सॉफ्टवेयर), और डार्क्स सम्मिलित थे। चूँकि, गिट (सॉफ़्टवेयर) और मर्क्यूरियल (सॉफ़्टवेयर) के रिलीज़ होने तक ओपन सोर्स डीवीसीएस कभी भी अधिक लोकप्रिय नहीं थे।

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

यह भी देखें
• संस्करण नियंत्रण

• संस्करण-नियंत्रण सॉफ्टवेयर की सूची

• संस्करण-नियंत्रण सॉफ़्टवेयर की तुलना

• वितरित संस्करण नियंत्रण का उपयोग करने वाला सॉफ़्टवेयर

• रिपोजिटरी क्लोन

• गिट, एक ओपन सोर्स लिनक्स कर्नेल विकास के लिए डीवीसीएस विकसित किया गया

• मर्क्यूरियल, गिट के समान एक क्रॉस-प्लेटफ़ॉर्म सिस्टम

• फ़ॉसिल, एक वितरित संस्करण नियंत्रण सिस्टम, बग ट्रैकिंग सिस्टम और विकी सॉफ़्टवेयर

• बिटकीपर

• जीएनयू बाज़ार

• समवर्ती संस्करण सिस्टम, वितरित संस्करण नियंत्रण सिस्टम का पूर्ववर्ती

• टोरटोइजएचजी, मर्क्यूरियल के लिए एक ग्राफिकल इंटरफ़ेस

• कोड को-ऑप, एक पीयर-टू-पीयर संस्करण नियंत्रण सिस्टम

बाहरी संबंध

 * Essay on various revision control systems, especially the section "Centralized vs. Decentralized SCM"
 * Introduction to distributed version control systems - IBM Developer Works article

Versionsverwaltung Gestion de version décentralisée 分散型バージョン管理システム